GAE Python URL 获取抛出无效 URL 错误
GAE Python URL Fetch throws InvalidURLError
GAE Python URL Fetch throws InvalidURLError 而相同的 URL 与 Postman 完美配合(Google Chrome App) .
代码
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 中的敏感文本替换为相似的不同字符。
The code 表示从 urlfetch 服务收到 INVALID_URL
RPC 错误代码。
最常见的情况似乎是由于 URL 长度限制(检查您未经编辑的 URL 是否符合):Undocumented max length for urlfetch URL?
很久以前它也被认为非常慢 URL 秒(在 Go
土地上,但我怀疑 urlfetch 服务本身是相同的服务于所有语言沙箱) - 不确定这是否仍然存在,我也看到了一个 DEADLINE_EXCEEDED
错误代码,同时 可能 已经专门针对这种情况引入了):
失败 可能 也与 URL foo:blah@hostname
中相当不寻常的 "host" 部分的错误解析有关。如果删除 foo:blah@
部分,请检查您是否遇到相同的错误。如果确实如此,您可能想用 Google 提出问题 - URL 似乎 有效,也适用于 curl
。
我找到了问题和解决方案。
我们需要使用 headers 指定 HTTP 身份验证信息。
urlfetch.make_fetch_call ( rpc,
url,
method = urlfetch.POST,
headers = { "Authorization" : "Basic %s" % base64.b64encode ( URL_USERNAME+":"+URL_PASSOWRD ) },
)
GAE Python URL Fetch throws InvalidURLError 而相同的 URL 与 Postman 完美配合(Google Chrome App) .
代码
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 中的敏感文本替换为相似的不同字符。
The code 表示从 urlfetch 服务收到 INVALID_URL
RPC 错误代码。
最常见的情况似乎是由于 URL 长度限制(检查您未经编辑的 URL 是否符合):Undocumented max length for urlfetch URL?
很久以前它也被认为非常慢 URL 秒(在 Go
土地上,但我怀疑 urlfetch 服务本身是相同的服务于所有语言沙箱) - 不确定这是否仍然存在,我也看到了一个 DEADLINE_EXCEEDED
错误代码,同时 可能 已经专门针对这种情况引入了):
失败 可能 也与 URL foo:blah@hostname
中相当不寻常的 "host" 部分的错误解析有关。如果删除 foo:blah@
部分,请检查您是否遇到相同的错误。如果确实如此,您可能想用 Google 提出问题 - URL 似乎 有效,也适用于 curl
。
我找到了问题和解决方案。 我们需要使用 headers 指定 HTTP 身份验证信息。
urlfetch.make_fetch_call ( rpc,
url,
method = urlfetch.POST,
headers = { "Authorization" : "Basic %s" % base64.b64encode ( URL_USERNAME+":"+URL_PASSOWRD ) },
)