我正在使用python中的请求库发出HTTP请求,但是我需要来自响应http请求的服务器的ip地址,并且我试图避免进行两次调用(并且可能有一个不同的ip地址来自响应的那个请求.
那可能吗?有没有python http库允许我这样做?
ps:我还需要发出HTTPS请求并使用经过身份验证的代理.
更新1:
例:
import requests
proxies = {
"http": "http://user:password@10.10.1.10:3128",
"https": "http://user:password@10.10.1.10:1080",
}
response = requests.get("http://example.org", proxies=proxies)
response.ip # This doesn't exist, this is just an what I would like to do
Run Code Online (Sandbox Code Playgroud)
那么,我想知道从响应中的方法或属性连接的IP地址请求.在其他库中,我能够通过找到sock对象并使用getpeername()方法来做到这一点.
有没有办法在Python中使用PATCH http方法发出请求?
我尝试使用httplib,但它不接受PATCH作为方法参数.
在Linux上运行了几个小时后,我使用urllib2,httplib和线程的Python 2.6程序开始为每个请求引发此错误:
<class 'urllib2.URLError'> URLError(gaierror(-3, 'Temporary failure in name resolution'),)
如果我重新启动程序,它会再次开始工作.我的猜测是某种资源枯竭但我不知道如何检查它.我该如何诊断和解决问题?
我如何让python httplib接受不受信任的证书?我在我的网络服务器上创建了一个蛇油/自签名证书,而我的python客户端无法连接,因为我使用的是不受信任的证书.
我宁愿在我的客户端代码中修复它,而不是让它在我的系统上受信任.
import httplib
def main():
conn = httplib.HTTPSConnection("127.0.0.1:443")
conn.request("HEAD","/")
res = conn.getresponse()
print res.status, res.reason
data = res.read()
print len(data)
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud) 我和Django使用了两个不同的python oauth库来通过twitter进行身份验证.使用WSGI进行apache设置.当我重新启动服务器时,一切都运行良好大约10分钟,然后httplib似乎锁定(请参阅以下错误).
我只运行了1个进程和1个WSGI线程,但这似乎没有任何区别.
我无法弄清楚为什么它会锁定并给出这个CannotSendRequest错误.我花了很多时间来解决这个令人沮丧的问题.任何有关它的提示/建议将不胜感激.
File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py", line 92, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "mypath/auth/decorators.py", line 9, in decorated
return f(*args, **kwargs)
File "mypath/auth/views.py", line 30, in login
token = get_unauthorized_token()
File "/root/storm/eye/auth/utils.py", line 49, in get_unauthorized_token
return oauth.OAuthToken.from_string(oauth_response(req))
File "mypath/auth/utils.py", line 41, in oauth_response
connection().request(req.http_method, req.to_url())
File "/usr/lib/python2.5/httplib.py", line 866, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python2.5/httplib.py", line 883, in _send_request
self.putrequest(method, url, **skips)
File "/usr/lib/python2.5/httplib.py", line 770, in putrequest
raise CannotSendRequest()
Run Code Online (Sandbox Code Playgroud)
CannotSendRequest
我正在尝试编写一个脚本来测试网页是否存在,如果不下载整个页面就会检查它会很好.
这是我的跳跃点,我已经看到多个示例以相同的方式使用httplib,但是,我检查的每个站点都返回false.
import httplib
from httplib import HTTP
from urlparse import urlparse
def checkUrl(url):
p = urlparse(url)
h = HTTP(p[1])
h.putrequest('HEAD', p[2])
h.endheaders()
return h.getreply()[0] == httplib.OK
if __name__=="__main__":
print checkUrl("http://www.stackoverflow.com") # True
print checkUrl("http://stackoverflow.com/notarealpage.html") # False
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑
有人建议这个,但他们的帖子被删除.. urllib2是否避免下载整个页面?
import urllib2
try:
urllib2.urlopen(some_url)
return True
except urllib2.URLError:
return False
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何通过代理将数据发送到服务器.我希望通过tor可以实现这一点,但是当使用SOCKS时,使用httplib显然是不可能的(如果我错了,请纠正我)
这就是我现在所拥有的
import httplib
con = httplib.HTTPConnection("google.com")
con.set_tunnel(proxy, port)
con.send("Sent Stuff")
Run Code Online (Sandbox Code Playgroud)
问题是,隧道设置时似乎冻结了.谢谢你的帮助.
我正在使用带有会话的python请求库:
def _get_session(self):
if not self.session:
self.session = requests.Session()
return self.session
Run Code Online (Sandbox Code Playgroud)
有时我会在日志中收到此警告:
[2014/May/12 14:40:04 WARNING ] HttpConnectionPool is full, discarding connection: www.ebi.ac.uk
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么这是警告而不是例外?
这是负责此的代码(来自http://pydoc.net/Python/requests/0.8.5/requests.packages.urllib3.connectionpool/):
def _put_conn(self, conn):
try:
self.pool.put(conn, block=False)
except Full:
# This should never happen if self.block == True
log.warning("HttpConnectionPool is full, discarding connection: %s"
% self.host)
Run Code Online (Sandbox Code Playgroud)
为什么会遇到这种异常?如果它被重新启动,我可以在我的代码中处理此异常,方法是创建新会话并删除旧会话.
如果它只是一个警告,是否意味着它不会以任何方式影响我的结果?我可以忽略它吗?如果没有,我该如何处理这种情况?
我的意思是,如果我去"www.yahoo.com/thispage",雅虎已经设置了一个过滤器来重定向/ thispage到/ thatpage.因此,每当有人访问/ thispage时,他/她将登陆/该页面.
如果我使用httplib/requests/urllib,它会知道有重定向吗?什么错误页面?无论何时找不到页面,某些站点都会将用户重定向到/ errorpage.
我需要一个简单的客户端方法,它可以在HTTP POST请求中发送布尔值,以及一个侦听的服务器端函数,并且可以将POST内容保存为var.
我无法找到有关如何使用的信息httplib.
请给我一个简单的例子,使用localhost作为http连接.