2012-05-09 68 views
0

我想使用python进行地址验证使用CDYNE服务。请求CDYNE结果在urllib2.HTTPError:HTTP错误400:错误的请求

我用this作为参考来创建POST要求,它看起来像下面

import urllib2 
import urllib 

url = 'http://pav3.cdyne.com/PavService.svc/VerifyAddressAdvanced' 
data = {} 

data['CityName'] = 'San Francisco' 
data['FirmOrRecipient'] = 'CDYNE' 
data['LicenseKey'] = 'valid_key' 
data['PrimaryAddressLine'] = '45 fremont street' 
data['ReturnCaseSensitive'] = True 
data['ReturnCensusInfo'] = True 
data['ReturnCityAbbreviation'] = True 
data['ReturnGeoLocation'] = True 
data['ReturnLegislativeInfo'] = True 
data['ReturnMailingIndustryInfo'] = True 
data['ReturnResidentialIndicator'] = True 
data['ReturnStreetAbbreviated'] = True 
data['SecondaryAddressLine'] = '' 
data['State'] = 'CA' 
data['Urbanization'] = '' 
data['ZipCode'] = '94105' 

,并发布要求如下

data_encoded = urllib.urlencode(data) 
req = urllib2.Request(url, data_encoded) 
response = urllib2.urlopen(req) 

我看到错误的

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen 
    return _opener.open(url, data, timeout) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 398, in open 
    response = meth(req, response) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 511, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 436, in error 
    return self._call_chain(*args) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 370, in _call_chain 
    result = func(*args) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 519, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 400: Bad Request 

我这是新的,所以不明白已经发生了什么请帮助

回答

1

您必须将请求发送为jsonxml格式的文档,该架构位于您已链接到的页面上。
你正在发送一个urlencoded请求,这是api不支持的。

编辑:这就是它会是什么样子使用JSON

import json 
data_encoded = json.dumps(data) 
req = urllib2.Request(url, data_encoded, {'Content-Type': 'application/json'}) 
response = urllib2.urlopen(req) 
print response.read() 
# ... 
+0

马塔,我该怎么做呢?我没有看到这样做的方式 – daydreamer

+0

这工作就像一个魅力!谢谢你Mata – daydreamer