urllib2.urlopen中的HTTP 400错误响应的语法帮助

0 投票
2 回答
2478 浏览
提问于 2025-04-17 09:57

我有一段代码,用来通过代理服务器登录一个网站,并使用网站的账号密码。登录过程很顺利。然后我尝试进入一个页面,我把之前得到的会话ID发过去,虽然看起来Cookies也发送得很好,但我却收到了一个HTTP 400错误,意思是请求有问题。请看看我的请求格式,告诉我我缺少了什么。我非常感谢任何反馈!

非常感谢你们的帮助,
伊戈尔

import urllib, urllib2, cookielib   
proxy_info = {
'user' : 'myuser',
'pass' : 'mypassword',
'host' : "myproxy.company.com",
'port' : 8080 
}  

proxy_support = urllib2.ProxyHandler({"http" : "http://%(user)s:%(pass)s@%(host)s:%(port)d" % proxy_info})

cj = cookielib.CookieJar()   
cookie_h = urllib2.HTTPCookieProcessor(cj)  
opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler(debuglevel=1) , cookie_h)   
headers={'User-agent' : 'Mozilla/5.0'}     

urllib2.install_opener(opener)    
url = 'http://www.targetsite.com/LogIn.asp?user_id=&user_p assword=myapppassword'  
f = urllib2.urlopen(url)  
html = f.read()  
print html  
url2 = 'http://www.targetsite.com/Main.asp?uid=&sid=3294799 60 HTTP/1.1'  
response = urllib2.urlopen (url2)  
html2 = response.read()  
print html2  

我得到了这个回复:

send: 'GET http://www.targetsite.com/Main.asp?u...&sid=329479960 HTTP/1.1 HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.targetsite.com\r\nProxy-Authorization: Basic aWNhcnJlb246YWdqYTEZ\r\nCookie: ASPSESSIONIDAQBASTST=CGDGDKDBEDEAGJJOINKPFGCC\r\nC onnection: close\r\nUser-Agent: Python-urllib/2.7\r\n\r\n'  
reply: 'HTTP/1.1 400 Bad Request\r\n'  
header: Cache-Control: no-cache  
header: Pragma: no-cache  
header: Content-Type: text/html; charset=utf-8  
header: Proxy-Connection: close  
header: Connection: close  
header: Content-Length: 730  
Traceback (most recent call last):  
File "C:\Aptana\myDev\root\nested\LaunchApp.py", line 45, in <module>  
response = urllib2.urlopen (url2)  
File "C:\PYTHON27\LIB\urllib2.py", line 126, in urlopen  
return _opener.open(url, data, timeout)  
File "C:\PYTHON27\LIB\urllib2.py", line 400, in open  
response = meth(req, response)  
File "C:\PYTHON27\LIB\urllib2.py", line 513, in http_response  
'http', request, response, code, msg, hdrs)  
File "C:\PYTHON27\LIB\urllib2.py", line 438, in error  
return self._call_chain(*args)  
File "C:\PYTHON27\LIB\urllib2.py", line 372, in _call_chain  
result = func(*args)  
File "C:\PYTHON27\LIB\urllib2.py", line 521, in http_error_default  
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)  
urllib2.HTTPError: HTTP Error 400: Bad Request   

2 个回答

0

urlurl2 是无效的。请尝试:

url = 'http://www.targetsite.com/LogIn.asp?' + urllib.urlencode(
    {"user_id": "", "user_p assword": "myapppassword"})
url2 = 'http://www.targetsite.com/Main.asp?' + urllib.urlencode(
    {"uid": "", "sid": "3294799 60 HTTP/1.1"})

名字 user_p assword 里最好不要有空格。另外,sid 的值看起来有点可疑,可能是复制粘贴时出错了。

0

你为什么在第二个网址里发送“HTTP/1.1”呢?这个写法看起来不太对,而且ulrlib2本身会自动发送HTTP/1.1。从追踪记录来看,问题可能就出在这里。

撰写回答