0

私の問題は、urrlib2を使用してSOAPリクエストのデータをPOSTしようとすることにあります。

非ASCII文字を含むのはデータだけです。

API_ENDPOINT = "https://www.foo.com/WebService/v1_2/fooService.asmx"
headers = {
        'Host': 'www.foo.com',
        'Content-Type': 'text/xml; charset=utf-8',
        'Content-length': "%d" % len(data_xml),
        'SOAPAction': '"https://www.foo.com/SaveJob"',
}
data = some xml unicode stuff
request = urllib2.Request(url=API_ENDPOINT, data=data_xml.encode("utf-8"), headers=headers)

このエラーが表示されます:

content = urllib2.urlopen(request).read()
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
  return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 400, in open
  response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 513, in http_response
  'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 438, in error
  return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
  result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 521, in http_error_default
  raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 400: Bad Request
4

1 に答える 1

2

そして、私はそれを修正しました。後で Google で検索する人にとっては、データを utf-8 としてエンコードする前に Content-Length ヘッダーを明示的に設定することに問題がありました。content-length ヘッダー (urllib2 によって自動的に設定される) を削除すると、問題が修正されました。

コンテンツの長さを明示的に設定する場合は、データを utf-8 としてエンコードした後に行う必要があります。

于 2013-10-30T19:57:34.083 に答える