用python模拟登陆报400错,是什么原因

哈泥湖 发布于 2013/07/25 09:29
阅读 1K+
收藏 0

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

各位达人:

我用python模拟登陆,在不加headers的时候报405错,加上headers报400错,能否指点下解决思路,万分感谢!!

用的代码如下:

cj = cookielib.LWPCookieJar()  
cookie_support = urllib2.HTTPCookieProcessor(cj)  
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)  
urllib2.install_opener(opener)  

postData = {'name': "user",  
                 'password': "psw", 
                 'formhash':formid,} 
postData = urllib.urlencode(postData)

headers = {'User-Agent' : 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ZHCN)',  
           'Referer' : url,
           'Content-Type': 'application/x-www-form-urlencoded',
           'Host': url2,
           'Accept': "text/html, application/xhtml+xml, */*",
           'Connection': 'Keep-Alive',
           'Accept-Encoding': 'gzip, deflate',
           }  

request = urllib2.Request(posturl, postData, headers)  #如果需要headers,则增加
response = urllib2.urlopen(request)  
conn = response.read()  
 

加载中
0
李学明
李学明
400 说明你提交的参数不全
0
crifan
crifan
该评论暂时无法显示,详情咨询 QQ 群:点此入群
哈泥湖
代码已在后面贴出,一直是报400错
0
明月照大江
明月照大江

header,每一对heaer的结尾是 \r\n.

所有header结束的时候,也要加\r\n.

所以整个首部字段的结束 是 两个 \r\n

哈泥湖
应该不是header的问题,header是采用标准的字典式提交,我写另外一个模拟登陆也是这种格式,可以跑通
0
哈泥湖
#! /usr/bin/env python
#coding=utf-8
import sys, HTMLParser, urlparse  
import urllib , urllib2  
import cookielib  
import string, os, Image, re
from bs4 import BeautifulSoup as bs

#登录的主页面  
loginurl = 'http://www.fy114.com.cn/yygh/login.aspx'  
posturl = 'http://www.fy114.com.cn/yygh/index.htm'
cj = cookielib.LWPCookieJar()  
cookie_support = urllib2.HTTPCookieProcessor(cj)  
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)  
urllib2.install_opener(opener) 

# 准备验证码、基本信息  
try:
    soup   = bs(urllib.urlopen(loginurl).read(),from_encoding='utf-8')
    codeurl = 'http://www.fy114.com.cn/yygh/'+soup.find("img",{"id":"ImageCheck"})['src']
    codePicture = 'E:\\pythonworkspace\\sciplot\\picture\\login\\code.jpg'
    f = open(codePicture, "wb")
    f.write(urllib.urlopen(codeurl).read())
    f.close()
except:
    print '错误!无法解析网页'


# 识别验证码

img=binary(codePicture)
checkCode=recognize("E:\\pythonworkspace\\sciplot\\picture\\4-charbase\\finnal\\",img)

# 构建postData
viewstate = soup.find("input",{"id":"__VIEWSTATE"})['value']
eventvalidation = soup.findAll("input")[1]['value']
hfid = soup.find("input",{"id":"HFID"})['value']

# 此处测试仅需提交两项
headers = { 
            'Host': 'http://www.fy114.com.cn',
            'Referer': 'http://www.fy114.com.cn/yygh/login.aspx',
           }  
#构造Post数据,他也是从抓大的包里分析得出的。  
postData = {
            '__LASTFOCUS':"",
            '__EVENTTARGET':"",
            '__EVENTARGUMENT':"",
            '__VIEWSTATE': viewstate,  
            '__EVENTVALIDATION': eventvalidation, 
            'UserID': 'yourid',
            'UserPSW': 'password',
            'CheckCode': checkCode,
            'HFID':hfid,
            'ImageButton1.x': '46',
            'ImageButton1.y': '23',
            }  

 
postData = urllib.urlencode(postData)  
request  = urllib2.Request(loginurl, postData, headers)
response = urllib2.urlopen(request)
request2 = urllib2.Request(posturl, postData, headers)
response2 = urllib2.urlopen(request2)  
conn = response2.read()  
print conn
这个是源代码
0
crifan
crifan
该评论暂时无法显示,详情咨询 QQ 群:点此入群
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部