最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java HttpClient執(zhí)行請求時配置cookie流程詳細講解

 更新時間:2023年02月03日 14:14:57   作者:?????  
這篇文章主要介紹了Java HttpClient執(zhí)行請求時配置cookie流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

簡介:Java使用HttpClient執(zhí)行請求一些網(wǎng)頁時,可能需要登陸或維護一下cookie,才能請求到我們想要的數(shù)據(jù)。本文就要介紹一下使用HttpClient執(zhí)行請求時設置cookie和維持維護cookie的方法及示例代碼。

1?添加定義cookie

1) 創(chuàng)建一個cookie存儲并在該存儲中設置示例cookie

BasicCookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");
cookie.setDomain(".github.com");
cookie.setPath("/");
cookieStore.addCookie(cookie);

2) HttpClient 4.3之前版本

@Test
public void givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_thenCorrect() 
  throws ClientProtocolException, IOException {
    BasicCookieStore cookieStore = new BasicCookieStore();
    BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");
    cookie.setDomain(".github.com");
    cookie.setPath("/");
    cookieStore.addCookie(cookie);
    DefaultHttpClient client = new DefaultHttpClient();
    client.setCookieStore(cookieStore);
    HttpGet request = new HttpGet("http://www.github.com");
    response = client.execute(request);
    assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
}

3) HttpClient 4.3之后版本

@Test
public void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrectly() 
  throws ClientProtocolException, IOException {
    BasicCookieStore cookieStore = new BasicCookieStore();
    BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");
    cookie.setDomain(".github.com");
    cookie.setPath("/");
    cookieStore.addCookie(cookie);
    HttpClient client = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build();
    final HttpGet request = new HttpGet("http://www.github.com");
    response = client.execute(request);
    assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
}

4) 根據(jù)請求設置Cookie

如果不能在整個HttpClient上設置cookie,則可以使用HttpContext類分別使用cookie配置請求:

@Test
public void whenSettingCookiesOnTheRequest_thenCookieSentCorrectly() 
  throws ClientProtocolException, IOException {
    BasicCookieStore cookieStore = new BasicCookieStore();
    BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");
    cookie.setDomain(".github.com");
    cookie.setPath("/");
    cookieStore.addCookie(cookie);
    instance = HttpClientBuilder.create().build();
    HttpGet request = new HttpGet("http://www.github.com");
    HttpContext localContext = new BasicHttpContext();
    localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
    // localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); // before 4.3
    response = instance.execute(request, localContext);
    assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
}

5) 低級請求上設置Cookie

@Test
public void whenSettingCookiesOnARequest_thenCorrect() 
  throws ClientProtocolException, IOException {
    instance = HttpClientBuilder.create().build();
    HttpGet request = new HttpGet("http://www.github.com");
    request.setHeader("Cookie", "JSESSIONID=1234");
    response = instance.execute(request);
    assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
}

2?維護保存響應的cookie

httpClientContext.getCookieStore()讀取到響應的cookie信息保存起來,下次請求之前可以使用HttpClientBuilder.create().setDefaultCookieStore()方法設置之前保存的cookie信息,執(zhí)行請求時就會攜帶cookie信息,具體代碼如下:

package org.hfutec.crawler.main;
import com.google.common.collect.Lists;
import org.apache.http.Header;
import org.apache.http.HttpHeaders;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
public class RequestWithCookie {
  public static void main(String[] args) throws URISyntaxException, IOException, ClassNotFoundException {
    //待請求的地址
    String url = "http://www.example.com";
    //請求參數(shù)
    List<NameValuePair> loginNV = new ArrayList<>();
    loginNV.add(new BasicNameValuePair("userName", "test"));
    loginNV.add(new BasicNameValuePair("passWord", "test"));
    //構(gòu)造請求資源地址
    URI uri = new URIBuilder(url).addParameters(loginNV).build();
    //創(chuàng)建一個HttpContext對象,用來保存Cookie
    HttpClientContext httpClientContext = HttpClientContext.create();
    //構(gòu)造自定義Header信息
    List<Header> headerList = Lists.newArrayList();
    headerList.add(new BasicHeader(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9," +
            "image/webp,image/apng,*/*;q=0.8"));
    headerList.add(new BasicHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
            "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"));
    headerList.add(new BasicHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate"));
    headerList.add(new BasicHeader(HttpHeaders.CACHE_CONTROL, "max-age=0"));
    headerList.add(new BasicHeader(HttpHeaders.CONNECTION, "keep-alive"));
    headerList.add(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,ja;q=0.2," +
            "de;q=0.2"));
    //構(gòu)造自定義的HttpClient對象
    HttpClient httpClient = HttpClients.custom().setDefaultHeaders(headerList).build();
    //構(gòu)造請求對象
    HttpUriRequest httpUriRequest = RequestBuilder.get().setUri(uri).build();
    //執(zhí)行請求,傳入HttpContext,將會得到請求結(jié)果的信息
    httpClient.execute(httpUriRequest, httpClientContext);
    //獲取請求結(jié)果中Cookie,此時的Cookie已經(jīng)帶有登錄信息了
    CookieStore cookieStore = httpClientContext.getCookieStore();
    //這個CookieStore保存了我們的登錄信息,我們可以先將它保存到某個本地文件,后面直接讀取使用
    saveCookieStore(cookieStore,"cookie");
    //使用Cookie來請求,首先讀取之前的Cookie
    CookieStore cookieStore1 = readCookieStore("cookie");
    //構(gòu)造一個帶這個Cookie的HttpClient
    HttpClient newHttpClient = HttpClientBuilder.create().setDefaultCookieStore(cookieStore1).build();
    //使用新的HttpClient請求。此時HttpClient已經(jīng)帶有了之前的登錄信息,再爬取就不用登錄了
    newHttpClient.execute(httpUriRequest, httpClientContext);
  }
  //使用序列化的方式保存CookieStore到本地文件,方便后續(xù)的讀取使用
  private static void saveCookieStore( CookieStore cookieStore, String savePath ) throws IOException {
    FileOutputStream fs = new FileOutputStream(savePath);
    ObjectOutputStream os =  new ObjectOutputStream(fs);
    os.writeObject(cookieStore);
    os.close();
  }
  //讀取Cookie的序列化文件,讀取后可以直接使用
  private static CookieStore readCookieStore( String savePath ) throws IOException, ClassNotFoundException {
    FileInputStream fs = new FileInputStream("cookie");//("foo.ser");
    ObjectInputStream ois = new ObjectInputStream(fs);
    CookieStore cookieStore = (CookieStore) ois.readObject();
    ois.close();
    return cookieStore;
  }
}

到此這篇關于Java HttpClient執(zhí)行請求時配置cookie流程詳細講解的文章就介紹到這了,更多相關Java配置cookie內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java動態(tài)方法調(diào)度實例分析

    java動態(tài)方法調(diào)度實例分析

    這篇文章主要介紹了java動態(tài)方法調(diào)度,結(jié)合實例形式對比分析了java的動態(tài)方法調(diào)度原理、使用方法與注意事項,需要的朋友可以參考下
    2016-06-06
  • springboot項目中idea的pom.xml文件的引用標簽全部爆紅問題解決

    springboot項目中idea的pom.xml文件的引用標簽全部爆紅問題解決

    這篇文章主要介紹了springboot項目中idea的pom.xml文件的引用標簽全部爆紅問題解決,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友參考下吧
    2023-12-12
  • java與c#的語法區(qū)別詳細介紹

    java與c#的語法區(qū)別詳細介紹

    由C#轉(zhuǎn)入Java一段時間了,總結(jié)下個人認為的Java同C#語法之間的不同之處,有不同意見之處還望各位海涵,剛學Java時覺得語法同C#大致是相同的(應該說C#同Java大致相同
    2012-11-11
  • Java實現(xiàn)字符串轉(zhuǎn)為駝峰格式的方法詳解

    Java實現(xiàn)字符串轉(zhuǎn)為駝峰格式的方法詳解

    這篇文章主要介紹了如何利用Java語言實現(xiàn)字符串轉(zhuǎn)為駝峰格式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-07-07
  • 基于SpringBoot2.0版本與老版本的區(qū)別

    基于SpringBoot2.0版本與老版本的區(qū)別

    這篇文章主要介紹了SpringBoot2.0版本與老版本的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring IOC (DI) 依賴注入的四種方式示例詳解

    Spring IOC (DI) 依賴注入的四種方式示例詳解

    這篇文章主要介紹了Spring IOC (DI) 依賴注入的四種方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 通過Java讀取xml文件內(nèi)容過程解析

    通過Java讀取xml文件內(nèi)容過程解析

    這篇文章主要介紹了通過Java讀取xml文件內(nèi)容過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 基于FlashPaper實現(xiàn)JSP在線閱讀代碼示例

    基于FlashPaper實現(xiàn)JSP在線閱讀代碼示例

    這篇文章主要介紹了基于FlashPaper實現(xiàn)JSP在線閱讀代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • IntelliJ?IDEA?2021.3永久最新激活至2099年(親測有效)

    IntelliJ?IDEA?2021.3永久最新激活至2099年(親測有效)

    最新版idea2021.3已出來,很多網(wǎng)友迫不及待的要升級idea2021最新版,今天小編抽空給大家整理了一篇教程關于idea2021.3最新激活教程,本文以idea2021.2.3為例通過圖文并茂的形式給大家分享激活詳細過程,感興趣的朋友參考下吧
    2020-12-12
  • Java三目運算中隱藏的自動拆裝箱

    Java三目運算中隱藏的自動拆裝箱

    這篇文章主要介紹了Java三目運算中隱藏的自動拆裝箱,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11

最新評論

兴国县| 岐山县| 招远市| 新巴尔虎左旗| 延川县| 台南县| 涪陵区| 巩义市| 察隅县| 长岛县| 肇东市| 博野县| 乡城县| 阳谷县| 张家川| 城口县| 鸡西市| 桂平市| 延川县| 南通市| 陇西县| 富蕴县| 柘荣县| 兰溪市| 柳州市| 三明市| 合川市| 赤峰市| 丹江口市| 巴彦淖尔市| 邮箱| 应城市| 东明县| 安仁县| 合山市| 中卫市| 江源县| 宁城县| 西青区| 如皋市| 中超|