python - urrlib2请求https站点 - 获得400错误

问题描述:

使用以下代码片段访问带有帖子的网址。python - urrlib2请求https站点 - 获得400错误

我可以使用wget得到它,以下内容: wget的--post数据 'p_calling_proc = bwckschd.p_disp_dyn_sched & p_term = 201010' https://spectrumssb2.memphis.edu/pls/PROD/bwckgens.p_proc_term_date

出于某种原因,我有一个问题与我的蟒蛇文中,我得到的400一个错误代码(当然浏览器工作正常)

任何想法/评论/等..

蟒蛇测试,我有:

// ==========================================

import urllib 
import urllib2 
import sys, string 
import time 
import mechanize 

Request = urllib2.Request 
urlopen = urllib2.urlopen 

headers ={'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'} 
query = "p_calling_proc%3Dbwckschd.p_disp_dyn_sched%26p_term%3D201010" 
url1="https://spectrumssb2.memphis.edu/pls/PROD/bwckgens.p_proc_term_date" 

req = Request(url1, query, headers) 

test1=0 
test=0 
while test==0: 
    print "aaaaattttt \n" 
    try: 
    res = urlopen(req) 
    #req = Request(url1, query, headers) 
    print "aaaappppp \n" 
    #urllib2.URLError, (e) 
    #print e 
    except urllib2.HTTPError, e: 
    print "ffff1111 "+str(e.code)+"\n" 
    if e.code: 
     test1=1 
     print "error ..sleep \n" 
     time.sleep(1) 
    else: 
     test1=0 
    except urllib2.URLError, e: 
    print e.reason 
    #print "ffff3333 "+e.code+"\n" 
    if e.reason: 
     test1=1 
     print "error ..sleep \n" 
     time.sleep(1) 
    else: 
     test1=0 
    #print "ddd "+e.code +"\n" 
    #print e 
    if test1==0: 
    test=1 

print "test1 = "+str(test1)+"\n" 
#res = urlopen(req) 
print "gggg 000000000000\n" 
s = res.read() 


任何想法/意见,将不胜感激..

感谢

尝试不编码查询字符串。 POST数据中的&和='s不需要是urlencoded。如果远程端的Web应用程序不希望查询字符串中存在%xx编码,则它将无法解析它。

这里是卷曲的HTTP请求头:

POST/HTTP/1.1 
User-Agent: curl/7.19.4 (universal-apple-darwin10.0) libcurl/7.19.4 OpenSSL/0.9.8k zlib/1.2.3 
Host: 127.0.0.1 
Accept: */* 
Content-Length: 188 
Expect: 100-continue 

bwckschd.p_disp_dyn_sched&p_term=201010 

,这里是从你的Python HTTP请求头:

POST/HTTP/1.1 
Accept-Encoding: identity 
Content-Length: 60 
Host: 127.0.0.1 
Content-Type: application/x-www-form-urlencoded 
Connection: close 
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT) 

p_calling_proc%3Dbwckschd.p_disp_dyn_sched%26p_term%3D201010 
+0

这只是错误的,“POST数据不需要被urlencoded,因为它被放置在HTTP请求的主体。”发布的表单数据的内容类型是“application/x-www-form-urlencoded”。 – 2009-12-20 01:03:57

+0

@Jonathan - 读起来很清楚,呃?谢谢,我编辑了这个帖子来澄清urlencoding,我当然想歪了。 – 2009-12-20 01:59:21

+0

这就是bettah! Downvote取消。 :) – 2009-12-20 03:10:32

我觉得您的查询字符串是不完全正确。尝试使用urllib.urlencode()方法生成查询,一个la

urllib.urlencode([ ('param1', value1), ('param2',value2) ]) 
+0

,我提供了 “是” urlencoded的查询查询.. 初始查询是: query === p_calling_proc = bwckschd.p_disp_dyn_sched&p_term = 201010 >>> p_calling_proc%3Dbwckschd.p_disp_dyn_sched%26p_term%3D201010 – 2009-12-19 22:48:57

+0

hi jon ... 感谢您的评论!!! 思考后..我试图使用未编码的查询..它似乎工作! 谢谢 – 2009-12-19 22:55:11