如何在Python中发送HTTP Get Web请求?

82

我在Python中向网站发送数据并获取响应时遇到了麻烦。我看到过类似的问题,但它们似乎都不能达到我的目标。

这是我试图将其转移到Python的C#代码:

    static void Request(Uri selectedUri)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(selectedUri);
        request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback;
        request.Method = "GET";
        request.Timeout = (int)Timeout.TotalMilliseconds;
        request.ReadWriteTimeout = (int)Timeout.TotalMilliseconds;
        request.CachePolicy = CachePolicy;
        request.UserAgent = UserAgent;

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            using (StreamReader responseReader = new StreamReader(response.GetResponseStream()))
            {
                string responseText = responseReader.ReadToEnd();
                File.WriteAllText(UrlFileName, responseText.Trim(), Encoding.ASCII);
            }
        }
     }

这是我用Python的尝试:

def request():
web = httplib.HTTPConnection('https://someurl.com');
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
web.request("GET", "/heartbeat.jsp", headers);
response = web.getresponse();
stream = ""; #something is wrong here

非常感谢您的帮助!


2
https://dev59.com/oXRB5IYBdhLWcg3wXmNI - monknomo
那个问题是在 requests 库出现之前发布的。 - voice
2个回答

161
你可以使用 urllib2
import urllib2
content = urllib2.urlopen(some_url).read()
print content

你也可以使用httplib

import httplib
conn = httplib.HTTPConnection("www.python.org")
conn.request("HEAD","/index.html")
res = conn.getresponse()
print res.status, res.reason
# Result:
200 OK

或者requests库

import requests
r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
r.status_code
# Result:
200

1
啊,我遇到的一个问题是我需要使用httplib发送请求。谢谢! - voice
9
Python 3.0中,httplib模块已更名为http.client。 - Krishnadas PC
3
在Python 3中,将urllib2替换为urllib.request - user9811991

7
在Python中,您可以使用urllib2http://docs.python.org/2/library/urllib2.html)来完成所有这些工作。
简单明了:
import urllib2
f =  urllib2.urlopen(url)
print f.read() 

将接收到的HTTP响应打印出来。

可以使用urllib.urlencode()函数传递GET/POST参数。有关更多信息,请参阅官方Urllib2教程


那么,我可以输入“print urllib2.urlopen(url, data数组).read()”吗? - voice
read()函数的输出是一个字符串,你可以打印、赋值给变量等。 - Sam
在Python 3中,将urllib2替换为urllib.request - user9811991

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接