【问题标题】:GAE Python URL Fetch throws InvalidURLError [duplicate]GAE Python URL Fetch 抛出 InvalidURLError [重复]
【发布时间】:2016-01-21 10:22:42
【问题描述】:

GAE Python URL Fetch 会抛出 InvalidURLError 而同一 URL 与 Postman(Google Chrome 应用程序)完美配合。

代码

url = "https://abcdefgh:28dfd95928dfd95928dfd95928dfd95928dfd95928dfd959@twilix.exotel.in/v1/Accounts/abcdefgh/Sms/send" 
form_fields = {
  "From": "08039511111",
  "To": "+919844100000",
  "Body": "message for you"
} 
form_data = urllib.urlencode (form_fields) 

try: 
  result = urlfetch.fetch(url=url,
                        payload=form_data,
                        method=urlfetch.POST,
                        headers={'Content-Type': 'application/x-www-form-urlencoded' } 
  ) 
  logging.info ("result = ["+repr (result)+"] ") 
except Exception: 
  logging.error ("Exception. ["+traceback.format_exc ()+"] ") 

输出日志

2016-01-21 15:48:23.368 +0530 E Exception. [ 
Traceback (most recent call last): File "main.py", line 27, in get method=urlfetch.POST, 
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 271, in fetch return rpc.get_result() 
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result return self.__get_result_hook(self) 
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/urlfetch.py", line 389, in _get_fetch_result 'Invalid request URL: ' + url + error_detail) InvalidURLError: Invalid request URL: https://abcdefgh:28dfd95928dfd95928dfd95928dfd95928dfd95928dfd959@twilix.exotel.in/v1/Accounts/abcdefgh/Sms/send ]

出于安全考虑,我已将 URL 中的敏感文本替换为相似的不同字符。

【问题讨论】:

    标签: python google-app-engine urllib2 urllib urlfetch


    【解决方案1】:

    The code 表示从 urlfetch 服务接收到 INVALID_URL RPC 错误代码。

    最常见的情况似乎是由于 URL 长度限制(检查您未编辑的 URL 是否命中):Undocumented max length for urlfetch URL?

    很久以前,它也出现在非常慢的 URL 上(在 Go 土地上,但我怀疑 urlfetch 服务本身在所有语言沙箱中都是一样的) - 不确定这是否仍然存在,我也看到了 @987654326 @错误代码以及可能在此期间专门针对这种情况引入):Google App Engine Go HTTP request to a slow page

    失败可能也与 URL foo:blah@hostname 中相当不寻常的“主机”部分的错误解析有关。如果删除 foo:blah@ 部分,请检查您是否遇到相同的错误。如果确实如此,您可能想向 Google 提出问题 - URL 似乎 有效,也适用于 curl

    【讨论】:

    • 谢谢丹。我找到了问题和解决方案。我们需要使用标头指定 HTTP 身份验证信息。 urlfetch.make_fetch_call ( rpc, url, method = urlfetch.POST, headers = { "Authorization" : "Basic %s" % base64.b64encode ( URL_USERNAME+":"+URL_PASSOWRD ) }, )
    【解决方案2】:

    我找到了问题和解决方案。 我们需要使用标头指定 HTTP 身份验证信息。

            urlfetch.make_fetch_call (  rpc, 
                                        url, 
                                        method      = urlfetch.POST, 
                                        headers     = {     "Authorization"     : "Basic %s" % base64.b64encode ( URL_USERNAME+":"+URL_PASSOWRD ) }, 
            ) 
    

    礼貌
    https://stackoverflow.com/a/8454580/1443563raugfer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      相关资源
      最近更新 更多