日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python如何获取请求的url_听说你在学习:如何通过代码请求URL地址

發布時間:2025/3/15 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python如何获取请求的url_听说你在学习:如何通过代码请求URL地址 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近比較忙碌,都沒有時間更新公眾號文章,表示比較慚愧。最近翻看了一下自己的博客,發現這篇文章的內容還是挺實用,所以,想分享給大家,歡迎閱讀。在后續,我會從一個范圍的角度進行編寫一系列文章,便于各位深層次的理解,而不是片面的了解知識點,并且會有規律性的更新文章,期望你的持續關注。

另外,我也官宣一下自己的花名為【小蝸牛】,愿我們都能像小蝸牛一樣,一步一個腳印,堅持不懈,達到我們的夢想彼岸。

情景引入

旁白:

今天興致極好,開開心心的與小白玩著“網頁小游戲”
1.小白

真開心呀,好久沒有玩這些網頁游戲了呢。
2.小蝸牛

確實,工作一來,哪有這樣的閑情逸致。
1.小白

不過,你看,咱們玩的游戲都是通過網頁鏈接請求,然后返回給咱們這么多對應的響應內容,它這里感覺好神奇。2.小蝸牛

當然,它里面涉及到的內容還是非常多,可不是一下就能完整掌握的,你這思考問題的能力大大加強了嘛!
1.小白

這可不嘛,學習到老才行呢。不過,我經常聽到同事說,快給我一個接口地址,我要向你發出請求獲取信息啦,這里面到底是怎么實現的,一直都沒有機會去請教他們。2.小蝸牛

虛心求教,這是非常值得的,不要害怕,不懂就要問,這才是應該有的態度。既然,這樣的話,那我就給你科普科普。這不,正好咱們也可以“中場休息”一會,再繼續游戲呢。
1.小白

好呀好呀!學習,游戲兩不誤,豈不是人生一大快事!2.小蝸牛

小白,你已經長大了!!

引言

當我們輸入一個URL然后回車,頁面會顯示出對應的功能信息,那么它這個過程到底是如何的呢?其實,這里面涉及到的內容會非常多,比如緩存,地址解析,http協議,網絡請求,OSI模型,服務器數據組裝,頁面渲染等等。這里,就不會說得那么詳細(PS:但是這個鏈路過程,建議各位看官可以好好的琢磨琢磨,分析分析),本文主要是針對,如果對一個已知URL發出請求并獲取到其實時的響應信息;

實際場景

我想,在實際開發中經常會碰到這樣的事情,就是:需要Http請求其他同事開發的接口,而獲取對應需要的內容,比如下載一個URL的文件或者獲取數據列表信息等等以及調用第三方公共接口信息。那么,必不可少的就是通過代碼去發出一個http的請求。那么,具體如何操作呢?客觀,慢慢往下看!

操作方法

現在的方法有很多,且不限于本文說到的幾種方式哦!本文主要采取循序漸進的方式,并沒有說哪一種方法就是最好的,具體問題具體分析,要以一種開放的心態看待這個問題。

HttpUrlConnection

請求步驟

PS:該方式是最原始的方式,所以值得學習其內部執行流程;

package com.hnu.scw.utils;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.Map;/** * @ Author :scw * @ Date :Created in 上午 10:34 2020/5/24 0024 * @ Description:請求URL的post方法工具類 * @ Modified By: * @Version: $version$ */public class HttpPostUtils { /** * 請求URL的post請求 * @param url 請求url地址 * @param parameters 請求參數 * @return 響應結果字符串 * @throws Exception 異常信息 */ public static String doRequestPostMethod(String url, Map<String, Object> parameters) throws Exception { // 將參數轉為String(PS:因為如果URL需要參數的話,那么都是采取字符串字節的形式) String params = convertRequestParameter(parameters); URL restURL = new URL(url); // 請求失敗的次數(PS:便于減少由于某次的網絡抖動而影響請求) int errorNumber = 0; while( errorNumber < 3 ) { try { HttpURLConnection conn = (HttpURLConnection) restURL.openConnection(); // 設置請求超時時間(PS:可以不設置) conn.setConnectTimeout(5000); conn.setReadTimeout(5000); // 請求方式(PS:這里采取POST請求,如果需要GET請求,則為GET) conn.setRequestMethod("POST"); // 設置請求的數據格式為JSON conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); conn.setRequestProperty("Connection", "Keep-Alive"); // 是否從httpUrlConnection讀入,默認情況下是true conn.setDoOutput(true); // 是否允許用戶交互,假設為true,則允許用戶交互的上下文中對此URL進行檢查(比如對話框驗證交互)。 conn.setAllowUserInteraction(false); // 獲取輸出流(PS:這里方式很多,這里提供幾種) // 方式一 PrintStream ps = new PrintStream(conn.getOutputStream()); ps.print(params); ps.close(); // 方式二 /* DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.write(params.getBytes("UTF-8")); out.flush(); out.close();*/ // 建立連接 conn.connect(); // 獲取響應輸入流 BufferedReader bReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; String resultStr = ""; // 拼接響應內容 while (null != (line = bReader.readLine())) { resultStr += line; } bReader.close(); // 返回相應結果(PS:為字符串格式) return resultStr; } catch (Exception e) { // 錯誤次數+1 errorNumber++; } } throw new Exception("當前網絡異常存在抖動,請稍后再試"); } /** * 將map形式的參數轉為字符串形式 * @param parameters 請求參數 * @return 請求參數字符串 */ private static String convertRequestParameter(Map<String, Object> parameters) throws UnsupportedEncodingException { StringBuilder sb = new StringBuilder(); // 遍歷接參數內容 for (Map.Entry<String,Object> param : parameters.entrySet()) { if (sb.length() != 0) { sb.append('&'); } // 防止中文亂碼 sb.append(URLEncoder.encode(param.getKey(), "UTF-8")); sb.append('='); sb.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8")); } return sb.toString(); }}

OkHttpClient

添加依賴

<dependency> <groupId>com.squareup.okhttp3groupId> <artifactId>okhttpartifactId> <version>3.8.0version> dependency>

請求步驟(GET和POST方式)

package com.hnu.scw.utils;import okhttp3.*;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.SSLSession;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.Map;/** * @ Author :scw * @ Date :Created in 上午 10:34 2020/5/24 0024 * @ Description:請求URL的post方法工具類 * @ Modified By: * @Version: $version$ */public class HttpPostUtils { /** * 執行 POST 請求 * @param url 請求的URL * @return 響應結果 */ public String doRequestPostByOkHttpClient(String url) { // ssl的認證重寫(PS:用于防止請求URL時有些系統會進行安全驗證而導致請求失敗) OkHttpClient okHttpClient = new OkHttpClient.Builder().hostnameVerifier( new HostnameVerifier() { @Override public boolean verify(String s, SSLSession sslSession) { return true; } } ).build(); // 如果是JDK1.8以上的,那么可以采取lambda重寫匿名函數的方式 /* OkHttpClient okHttpClient = new OkHttpClient.Builder().hostnameVerifier( (s, sslSession) ->{ return true; } ).build();*/ // 設置請求的參數信息 RequestBody requestBody = new FormBody.Builder() .add("key1", "test") .add("key2", "hello") .build(); // 封裝請求頭信息 Request request = new Request.Builder() .url(url) .post(requestBody) .addHeader("Cookie", "JSESSIONID=299571E0E40DA6E9962E41B87A669BBB") .addHeader("content-type", "application/json") .addHeader("cache-control", "no-cache") .build(); Call call = okHttpClient.newCall(request); try { Response response = call.execute(); // 返回相應結果 return response.body().string(); } catch (IOException e) { e.printStackTrace(); } return null; }}

SpingRestTemplate

請求步驟(GET和POST方式)

方式一

package com.hnu.scw.utils;import okhttp3.*;import org.apache.poi.ss.formula.functions.T;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import org.springframework.web.client.RestTemplate;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.SSLSession;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.Map;/** * @ Author :scw * @ Date :Created in 上午 10:34 2020/5/24 0024 * @ Description:請求URL的post方法工具類 * @ Modified By: * @Version: $version$ */public class HttpPostUtils { /** * 執行 POST 請求 通過Spring 的restTemplate方式 * @param url 請求URL * @param parameter 請求參數 * @return 響應結果字符串 */ public String doRequestPostByRestTemplate(String url, Object parameter) { RestTemplate template = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); // 設置請求的格式為:json MediaType type = MediaType.parseMediaType("application/json;charset=UTF-8"); headers.setContentType(type); HttpEntity entity = new HttpEntity(parameter,headers); // POST方式,如果要用GET,則為getForObject即可 String result = template.postForObject(url, entity, String.class); return result; } /** * 執行 POST 請求 通過Spring 的restTemplate方式二 * @param url 請求URL * @param parameter 請求參數(PS:一般為java實體) * @param backDto 相應的結果實體 * @return 響應結果實體 */ public T doRequestPostByRestTemplate(String url, Object parameter, Class backDto) { RestTemplate template = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); // 設置請求的格式為:json MediaType type = MediaType.parseMediaType("application/json;charset=UTF-8"); headers.setContentType(type); HttpEntity entity = new HttpEntity(parameter,headers); // POST方式,如果要用GET,則為getForObject即可 String result = template.postForObject(url, entity, String.class); // 將json字符串轉為實體 return JSON.parseObject(result, backDto); }}

方式二:

package com.hnu.scw.utils;import okhttp3.*;import org.apache.poi.ss.formula.functions.T;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import org.springframework.web.client.RestTemplate;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.SSLSession;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.Map;/** * @ Author :scw * @ Date :Created in 上午 10:34 2020/5/24 0024 * @ Description:請求URL的post方法工具類 * @ Modified By: * @Version: $version$ */public class HttpPostUtils { /** * 執行 POST 請求 通過Spring 的restTemplate方式的方式二 * @param url 請求URL * @param parameter 請求參數 * @return 響應結果實體類型 */ public <T> T doRequestPostByRestTemplateEntity(String url, Object parameter, Class<T> backDto) { RestTemplate template = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); // 設置請求的格式為:json MediaType type = MediaType.parseMediaType("application/json;charset=UTF-8"); headers.setContentType(type); HttpEntity entity = new HttpEntity(parameter,headers); // POST方式,如果要用GET,則為getForEntity即可 ResponseEntity<T> tResponseEntity = template.postForEntity(url, entity, backDto); return tResponseEntity.getBody(); }}

總結

  • 本文講述的方式各自有各自的應用場景,并不存在哪一種就是最好的形式(PS:當然不僅僅只有這些方式,比如還有apache的httpClient,CloseableHttpClient以及springCloud中常見的Fegin)。

  • 實際工作中發出http的請求是相對的多,對于其內部的執行流程和實現原理要去掌握(PS:網絡協議+socket+netty都是需要掌握)。

  • 針對常用的場景和技術要學會去總結,分析各自的利弊,而不要只會用而不明白其內部。

  • 通過閱讀本文內容之后,建議將“輸入一個URL地址,然后回車敲擊顯示結果”,這個鏈路的整個過程都去學習和掌握,你會發現更多的美哦!

  • 小彩蛋:如果覺得公眾號文章內容看起來顯得比較多,那么還可以在我的博客中進行查閱哦,還有更多的驚喜等著你的光顧。

    https://blog.csdn.net/Cs_hnu_scw/article/details/106311101

    總結

    以上是生活随笔為你收集整理的python如何获取请求的url_听说你在学习:如何通过代码请求URL地址的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 精品少妇一区二区三区 | 无码少妇一级AV片在线观看 | 国产视频分类 | 亚洲视频成人 | xxxx视频在线观看 | 欧美第四页 | 国产视频九色蝌蚪 | 亚洲欧美日韩综合在线 | 加勒比av在线播放 | 一区二区三区视频在线 | 69精品视频 | 韩国美女啪啪 | 光明影院手机版在线观看免费 | 9999热视频 | 飘花影院伦理片 | 国产午夜精品久久久久久久 | 久久精品亚洲a | 黄色av电影在线观看 | 91天堂素人 | 天堂av免费在线 | 欧美性受xxxx黑人猛交88 | 欧美激情日韩 | 日韩av一区二区在线观看 | 69av在线| 国产东北真实交换多p免视频 | 在线免费视频一区二区 | 波多野结衣大片 | 日韩少妇精品 | 亚洲色图插插插 | 操人小视频 | 西西大胆午夜视频 | 九九九热精品 | 成年人国产 | 欧美高清视频在线观看 | 青青草偷拍视频 | 精品一区二区在线观看视频 | 欧美人体视频一区二区三区 | www.88av| 久久久免费毛片 | 成人一区二区电影 | 福利片网址 | 久久99热精品 | www,四虎| 黄色网日本| 综合av网 | 女人十八毛片嫩草av | 伊人影院在线观看视频 | 国产成人精品免费视频 | 午夜老湿机 | 国产精品久久久久久久久久久久久久久久 | av视| 美丽的姑娘在线观看 | www.蜜臀av| 在线播放色 | 中文字幕第一区综合 | 黄色午夜影院 | 久草视频免费 | 国产精品国产精品国产专区蜜臀ah | 国产女女做受ⅹxx高潮 | 在线va视频 | 国产福利小视频在线 | 色网在线视频 | 久久99久久99精品免视看婷婷 | 久久888 | 免费看的黄色网 | 靠逼网站在线观看 | 免费av毛片| 亚洲综合一区二区 | 四季av中文字幕一区 | 日韩黄色一区二区 | 日韩欧美在线观看视频 | 免费看黄色片子 | 天堂久久一区 | 高清视频免费在线观看 | 无码人妻精品一区二 | 伊人久久久久噜噜噜亚洲熟女综合 | 国产黄色一级 | 美女张开双腿让男人捅 | 欧美亚韩一区二区三区 | 91黄色视屏 | 人妻无码一区二区三区 | 国产免费资源 | 国产婷婷色一区二区在线观看 | 午夜a级片 | 欧美日韩一区二区电影 | 99热这里只有精品1 亚洲人交配视频 | 永久免费看片在线观看 | 日韩岛国片| 18pao国产成视频永久免费 | 成人免费毛片嘿嘿连载 | 一区av在线 | 欧美噜噜噜 | 色播五月综合 | 人人爱操 | 久久久亚洲一区二区三区 | 日本伦理片在线看 | 岛国av电影在线观看 | 1024香蕉视频 | 狠狠干在线观看 |