使用Requests发送HTTP请求

本文介绍了如何使用Python的Requests库进行GET和POST请求。首先,通过import requests导入模块,然后利用requests.get()发送GET请求,例如访问百度网站并检查状态代码判断请求是否成功。接着,展示了如何传递URL参数以及获取响应的完整URL和响应文本。对于POST请求,使用requests.post()函数,以字典形式传递数据,输出响应内容。整个过程详细解释了Requests库在HTTP请求中的应用。
部署运行你感兴趣的模型镜像

Python语言内置的urllib2模块也可以发送HTTP请求,但Requests包可以使用更简单的方式来发送GET/POST的HPPT请求。这时需要导入模块,如下所示:

import requests

发送GET请求

一般来说,在大部分浏览器URL网址中输入网址发送的请求都是GET请求,这是向Web服务器获取资源的请求。Requests即调用get()函数来发送GET请求。

发送Baidu网站的GET请求,如下所示:

import requests

r = requests.get("http://www.baidu.com")
print(r.status_code)

上述程序 代码导入requests模块后,调用get()函数发送HTTP请求,参数是URL网址字符串,变量r是响应的response对象。可以使用status_code属性获取请求的状态代码。

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
200

[Done] exited with code=0 in 1.326 seconds

上述运行结果 为200,表示请求成功;如果值是400~599,表示有错误,如404表示网页不存在。

通过if/else条件检查状态代码来判断GET请求是否成功,如下所示:

import requests

r = requests.get("http://www.baidu.com")
if r.status_code == 200:
    print("请求成功...")
else:
    print("请求失败...")

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
请求成功...

[Done] exited with code=0 in 3.979 seconds

URL网址可以传递参数字符串,参数位于问号“?”之后 。如果参数不止一个,则使用“&”符号分隔,如下所示:

https://httpbin.org/get?name=陈会安&score=95

上述URL网址传递参数name和score,其值分别为“陈会安”和“95”。发送http://httpbin.org/get(HTTP请求/响应的测试网站)的GET请求,并且加上参数,如下所示:

import requests

url_params = {'name': '陈会安', 'score': 95}
r = requests.get("http://httpbin.org/get", params=url_params)
print(r.url)

上述代码需要建立 字典的参数,键是参数名称,值是参数值,在get()函数的params参数指定url_params变量值,r.url属性可以获取完整URL网址字符串。

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
http://httpbin.org/get?name=%E9%99%88%E4%BC%9A%E5%AE%89&score=95

[Done] exited with code=0 in 1.501 seconds

上述运行结果的URL网址,name参数经过编码。

在http://httpbin.org网站响应的是JSON数据,可以使用text属性输出响应字符串,如下所示:

import requests

data = {'name': '陈会安', 'score': 95}
r = requests.get("http://httpbin.org/get", params=data)
print(r.text)

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
{
  "args": {
    "name": "\u9648\u4f1a\u5b89", 
    "score": "95"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.27.1", 
    "X-Amzn-Trace-Id": "Root=1-6305819d-7ea175694ab20fae54a10a49"
  }, 
  "origin": "167.220.255.49", 
  "url": "http://httpbin.org/get?name=\u9648\u4f1a\u5b89&score=95"
}


[Done] exited with code=0 in 7.047 seconds

发送POST请求

Requests包调用get()函数发送GET请求,同时,POST请求调用post()函数。POST请求就是发送窗体,如同URL参数,需要发送表单域的输入数据。

调用post()函数发送http://httpbin.org/post的POST请求,如下所示:

import requests

post_data = {'name': '陈会安', 'score': 95}
r = requests.post("http://httpbin.org/post", data=post_data)
print(r.text)

上述程序代码需要建立字典的发送数据,在post()函数中指定data参数是past_data变量值 ,r.text属性可以输出响应字符串,运行结果如下:

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\Ch4_2_2.py"
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "name": "\u9648\u4f1a\u5b89", 
    "score": "95"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "41", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.27.1", 
    "X-Amzn-Trace-Id": "Root=1-63058a6a-49ccd218040f0ed05a2ff9a6"
  }, 
  "json": null, 
  "origin": "167.220.255.49", 
  "url": "http://httpbin.org/post"
}


[Done] exited with code=0 in 1.603 seconds

从上述运行结果中可以看到发送的数据。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

package com.zhy.http.okhttp; import android.os.Handler; import android.os.Looper; import android.text.TextUtils; import android.util.Log; import com.zhy.http.okhttp.cookie.SimpleCookieJar; import okhttp3.Call; import okhttp3.OkHttpClient; import okhttp3.Response; import com.zhy.http.okhttp.builder.GetBuilder; import com.zhy.http.okhttp.builder.PostFileBuilder; import com.zhy.http.okhttp.builder.PostFormBuilder; import com.zhy.http.okhttp.builder.PostStringBuilder; import com.zhy.http.okhttp.callback.Callback; import com.zhy.http.okhttp.https.HttpsUtils; import com.zhy.http.okhttp.request.RequestCall; import java.io.IOException; import java.io.InputStream; import java.util.concurrent.TimeUnit; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLSession; /** * Created by zhy on 15/8/17. */ public class OkHttpUtils { public static final String TAG = "OkHttpUtils"; public static final long DEFAULT_MILLISECONDS = 10000; private static OkHttpUtils mInstance; private OkHttpClient mOkHttpClient; private Handler mDelivery; private OkHttpUtils() { OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder(); //cookie enabled okHttpClientBuilder.cookieJar(new SimpleCookieJar()); mDelivery = new Handler(Looper.getMainLooper()); if (true) { okHttpClientBuilder.hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); } mOkHttpClient = okHttpClientBuilder.build(); } private boolean debug; private String tag; public OkHttpUtils debug(String tag) { debug = true; this.tag = tag; return this; } public static OkHttpUtils getInstance() { if (mInstance == null) { synchronized (OkHttpUtils.class) { if (mInstance == null) { mInstance = new OkHttpUtils(); } } } return mInstance; } public Handler getDelivery() { return mDelivery; } public OkHttpClient getOkHttpClient() { return mOkHttpClient; } public static GetBuilder get() { return new GetBuilder(); } public static PostStringBuilder postString() { return new PostStringBuilder(); } public static PostFileBuilder postFile() { return new PostFileBuilder(); } public static PostFormBuilder post() { return new PostFormBuilder(); } public void execute(final RequestCall requestCall, Callback callback) { if (debug) { if(TextUtils.isEmpty(tag)) { tag = TAG; } Log.d(tag, "{method:" + requestCall.getRequest().method() + ", detail:" + requestCall.getOkHttpRequest().toString() + "}"); } if (callback == null) callback = Callback.CALLBACK_DEFAULT; final Callback finalCallback = callback; requestCall.getCall().enqueue(new okhttp3.Callback() { @Override public void onFailure(Call call, final IOException e) { sendFailResultCallback(call, e, finalCallback); } @Override public void onResponse(final Call call, final Response response) { if (response.code() >= 400 && response.code() <= 599) { try { sendFailResultCallback(call, new RuntimeException(response.body().string()), finalCallback); } catch (IOException e) { e.printStackTrace(); } return; } try { Object o = finalCallback.parseNetworkResponse(response); sendSuccessResultCallback(o, finalCallback); } catch (Exception e) { sendFailResultCallback(call, e, finalCallback); } } }); } public void sendFailResultCallback(final Call call, final Exception e, final Callback callback) { if (callback == null) return; mDelivery.post(new Runnable() { @Override public void run() { callback.onError(call, e); callback.onAfter(); } }); } public void sendSuccessResultCallback(final Object object, final Callback callback) { if (callback == null) return; mDelivery.post(new Runnable() { @Override public void run() { callback.onResponse(object); callback.onAfter(); } }); } public void cancelTag(Object tag) { for (Call call : mOkHttpClient.dispatcher().queuedCalls()) { if (tag.equals(call.request().tag())) { call.cancel(); } } for (Call call : mOkHttpClient.dispatcher().runningCalls()) { if (tag.equals(call.request().tag())) { call.cancel(); } } } public void setCertificates(InputStream... certificates) { mOkHttpClient = getOkHttpClient().newBuilder() .sslSocketFactory(HttpsUtils.getSslSocketFactory(certificates, null, null)) .build(); } public void setConnectTimeout(int timeout, TimeUnit units) { mOkHttpClient = getOkHttpClient().newBuilder() .connectTimeout(timeout, units) .build(); } }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值