httpClient一些资料

package proxy;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.URIException;
import org.apache.commons.httpclient.methods.PostMethod;

public class bolg_Login {
   
     /**
     * @param args
     */
    public static void login() {
       
        System.out.println("登陆开始");
       String url = "http://tianying-fly.blog.hexun.com/5558132_d.html";
              HttpClient client = new HttpClient();
              PostMethod method = new PostMethod(url);
//         
              method.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gb2312");//设置传输字符集,如果需要传输中文这需要设置为中文字符集
             
             
              try {
//                  NameValuePair pairA = new NameValuePair("j_username","018911");//设置要登录的用户名
//                   
//                  NameValuePair pairB = new NameValuePair("j_password", "1");
                  NameValuePair[] pair = new NameValuePair[] {  };  // 设置要登录得密码          
                  method.setRequestBody(pair);
                //设置cookis(目的是每次访问都在同一个session中)               
                        //client.getState().addCookies(cookis);
               
                  client.executeMethod(method);//发出请求
                  if (method.getStatusCode() == HttpStatus.SC_OK) {
                 System.out.println("method.getStatusCode()"+method.getStatusCode()+",HttpStatus.SC_OK="+HttpStatus.SC_OK);
                 System.out.println(method.getResponseBodyAsString());

}

//         
              } catch (URIException e) {
                 // e.printStackTrace();
              } catch (IOException e) {
                 // e.printStackTrace();
              }
             
              System.out.println("登陆结束");
            
    }
  

}
//特别注意的是:

1.在传参数得时候需要设置请求传送内容得字符集method.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gb2312");不然服务器接收到得中文可能会是乱码,

2.对于重定向的问题需要根据返回的状态进行处理,

3.是session问题

这就需要cooke与session进行合作,如果每次访问要共享同一个session,则需要每次设置client.getState().addCookies(cookis);其中cookis为上次或者上次以前在同意session期中返回得cookie,及cookis = client.getState().getCookies();

4.返回得结果可能需要转码,及method.getResponseBodyAsString()内容可能需要转码!

运用httpclient需要对http协议有一些深入的了解,同时需要明白session与cookie的关系。

1.想下载远程URL地址的内容。可以使用httpclient现在整理一下相关的代码:
    而且解决中文乱码问题

    方法一:流转码

    public String convertStreamToString(InputStream is) throws UnsupportedEncodingException {

    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"gbk"));

    StringBuilder sb = new StringBuilder();

    String line = null;

    try {

    while ((line = reader.readLine()) != null) { sb.append(line + "\n");

    }

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    is.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    return sb.toString();

    }

    //下载内容

    private String urlContent(String urlString) throws HttpException, IOException {

    HttpClient client = new HttpClient();

    GetMethod get = new GetMethod("http://www.tianya.cn/publicforum/articleslist/0/no20.shtml"); client.executeMethod(get); System.out.print(get.getResponseCharSet()); InputStream iStream = get.getResponseBodyAsStream();

    String contentString = convertStreamToString(iStream);

    get.releaseConnection();

    return contentString;

    }

==========利用httpclient访问受保护的资源地址=============

模拟登录
1、session方式
package com.crawinfo.httpclient;

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

public class HttpClientTest {

/**
* @param args
* @throws IOException
* @throws HttpException
*/
public static void main(String[] args) throws HttpException, IOException {

HttpClient httpclient=new HttpClient();//创建一个客户端,类似打开一个浏览器

GetMethod getMethod=new GetMethod("受保护的地址");

PostMethod postMethod = new PostMethod("登录url");  
NameValuePair[] postData = new NameValuePair[2];  
postData[0] = new NameValuePair("loginName", "***");  
postData[1] = new NameValuePair("loginPswd", "**");  
postMethod.addParameters(postData);  

int statusCode=httpclient.executeMethod(postMethod);//回车——出拳!  

statusCode= httpclient.executeMethod(getMethod);

System.out.println("response1=" + postMethod.getResponseBodyAsString());//察看拳头命中情况,可以获得的东西还有很多,比如head, cookies等等  

System.out.println("response2=" + getMethod.getResponseBodyAsString());//察看拳头命中情况,可以获得的东西还有很多,比如head, cookies等等  

getMethod.releaseConnection();
postMethod.releaseConnection();//释放,记得收拳哦 



}

}
二、cookie方式
package com.crawinfo.rencai;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.GetMethod;

public class CrawTest {
static Cookie[] cookies=new Cookie[2];

public static void login() throws Exception {
cookies[0] = new Cookie("抓取信息网址", "SessionId",
"0", "/", -1, false);
cookies[1] = new Cookie("抓取信息网址", "otherproperty",
"xxx", "/", -1, false);

}

public static String getRes(String path)throws Exception{
String res=null;
HttpClient client=new HttpClient();
HttpMethod method=new GetMethod(path);
client.getState().addCookies(cookies);
client.executeMethod(method);
if(method.getStatusCode()==200){
res=method.getResponseBodyAsString();
cookies=client.getState().getCookies();
}
method.releaseConnection();
return res;
}

public static void main(String[] args) throws Exception {

CrawTest.login();

String info = CrawTest.getRes("抓取信息网址");
System.out.println("info="+info);
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go的httpclient包是一个用于在Go语言中进行HTTP请求的神奇工具。它提供了许多方便的功能和选项,可以帮助您快速编写和执行HTTP请求。您可以使用go get命令来安装它,如下所示: ``` go get github.com/ddliu/go-httpclient ``` 安装成功后,您可以在您的Go代码中导入它并开始使用。下面是一个简单的示例代码,演示了如何使用httpclient包发送HTTP GET请求并设置一些选项: ```go package main import ( "log" "github.com/ddliu/go-httpclient" ) func main() { resp, err := httpclient.Get("https://api.example.com/v1/data"). Param("limit", "10"). Param("offset", "0"). Header("Authorization", "Bearer xxxxxxxx"). Timeout(5). Send() if err != nil { log.Fatal(err) } log.Println(resp.StatusCode) log.Println(resp.String()) } ``` 在这个例子中,我们使用httpclient的Get方法发送了一个GET请求到"https://api.example.com/v1/data",并设置了一些参数和头部信息。我们还通过Timeout方法设置了超时时间为5秒。 除了GET请求,httpclient还支持其他HTTP方法,如POST、PUT、DELETE等。您可以根据需要选择合适的方法来发送请求。此外,httpclient还提供了许多其他有用的功能,如设置代理、设置SSL证书等。 总结来说,go-httpclient是一个非常方便和实用的Go语言HTTP客户端库,可以帮助您轻松地发送和处理HTTP请求。您可以根据自己的需求使用它的各种功能和选项来定制您的请求。希望这个回答对您有帮助!如果还有其他问题,请随时提问。 引用的资料:go-httpclient官方文档

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值