python-3.x
  • http
  • curl
  • post
  • 2017-05-03 360 views 0 likes 
    0

    我試圖用urllib的發送請求:Python 3中的POST請求400錯誤

    import urllib.request 
    import urllib.parse 
    from urllib.error import URLError, HTTPError 
    
    api_key = "" 
    base_url_string = 'URL' 
    values = {'api_key' : api_key} 
    
    user_agent = 'curl/7.47.0' 
    headers = {'Content-Type' : 'application/json', 
          'User-Agent': user_agent, 
          'Accept' : '*/*'} 
    
    data = urllib.parse.urlencode(values) 
    data = data.encode('ascii') 
    request = urllib.request.Request(url=base_url_string, data=data, headers=headers) 
    
    try: 
        response = urllib.request.urlopen(request) 
        json_response = json.loads(response.read().decode("utf-8")) 
    
        for line in json_response: 
         print(line) 
    
    except URLError as e: 
        print(e) 
    

    ,並獲得 「HTTP錯誤400:錯誤的請求」

    curl -v -H "Content-Type: application/json" -d '{"api_key":""}' URL 
    

    工作正常。 我在這裏錯過了什麼?

    回答

    1

    您正在宣佈application/json作爲內容類型。但是你實際上通過urllib.parse.urlencode()編碼的是application/x-www-form-urlencoded。改爲使用json.dumps()

    +0

    data = urllib.parse.urlencode(values)成爲data = json.dumps(values),它起作用 – cheetahfm

    相關問題