Python使用urllib和urllib2实现HTTP GET与POST请求详解

听雨眠
听雨眠
发布时间:2026-10-13| 3人浏览过
原创

本文详细介绍如何利用Python标准库中的urllib和urllib2模块发起HTTP GET和POST请求。通过具体代码示例,演示了如何构造查询字符串进行GET请求,以及如何发送JSON数据执行POST请求,并结合轻量级Web服务器boa和CGI脚本验证了请求的有效性,适合需要处理基础HTTP交互的开发者参考。

前言

本文主要介绍Python中如何使用urllib和urllib2模块来访问HTTP协议的GET和POST请求。通过这两个模块,可以相对轻松地实现对HTTP服务的访问。接下来将详细展开具体实现方法。

示例详解

以下示例演示如何向http://127.0.0.1/cgi/test发起GET和POST请求。

此处使用常规的查询字符串(query string)格式。

POST请求中接收JSON格式数据。

其中,

在urllib2中,Request方法若仅传入一个参数,则默认为GET请求;若传入两个参数,第二个参数作为POST的数据内容,则执行HTTP POST请求。

#!/usr/bin/env python
 
import urllib
import urllib2
import json
 
url_base = "http://127.0.0.1/cgi/test"
 
#GET
try:
 query = {'test':'yes','name':'colin'}
 query_string = urllib.urlencode(query)
 url = url_base+"?"+query_string
 print "GET", url<br data-filtered="filtered"> print "web output:"
 print urllib2.urlopen(urllib2.Request(url)).read()
except Exception as err:
 print err
 
#post
try:
 url = url_base
 print "POST", url
 a = {'k1':123, 'k2': '456', 'k3':'test'}
 json_s = json.dumps(a)<br data-filtered="filtered"> print "POST input:"
 print json_s<br data-filtered="filtered"> print "web output:"
 print urllib2.urlopen(urllib2.Request(url, json_s)).read()
except Exception as err:
 print err

测试服务端使用bash脚本编写,如下所示。其中jq是用于处理JSON数据的命令行工具,需单独下载;而bash、sed和awk通常为系统自带组件。

#!/bin/bash
echo -e 'Content-type:text/plain\r'
echo -e '\r'
 
if [ X"$REQUEST_METHOD" = X"POST" ];then
  jq . | sed -nr '/:/!d; s/^([ \t]*"[^"]+"[ \t]*):/\1=/;s/,[ \t]*$//;s/"//g;p'
else
  echo ${QUERY_STRING} | awk 'BEGIN{RS="&"}1'
fi

任何支持CGI的Web服务器均可使用,此处选用轻量级Web服务器boa。虽然它可能不适用于大型商业网站,但在嵌入式系统中通过CGI提供API接口非常实用,且部署过程十分简便。

搭建完成后,进行功能测试。

$ ./test.py
GET http://127.0.0.1/v1/lic/test?test=yes&name=colin
web output:
test=yes
name=colin


POST http://127.0.0.1/v1/lic/test
POST input:
{"k3": "test", "k2": "456", "k1": 123}
web output:
 k3= test
 k2= 456
 k1= 123

总结

以上就是本文的全部内容,希望这些内容能对各位的学习或工作有所帮助。如有任何疑问,欢迎留言交流,感谢大家对本站的支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。