2016-01-21 108 views
0

GAE Python網址提取引發InvalidURLError,而同一個網址與Postman(Google Chrome應用)完美配合。GAE Python網址提取InvalidURLError

CODE

url = "https://abcdefgh:[email protected]n/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:[email protected]n/v1/Accounts/abcdefgh/Sms/send ] 

出於安全目的,我已經在類似的不同字符的URL替換敏感文字。

回答

0

我發現了問題和解決方案。 我們需要使用標題指定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/1443563通過raugfer

0

The code指示INVALID_URL從urlfetch服務收到RPC錯誤代碼。

最經常發生的事情似乎是由於URL長度的限制(請檢查您的未修改的網址點擊那個):Undocumented max length for urlfetch URL?

很久以前,也有人看到了非常緩慢的URL(在Go土地,但我懷疑網址抓取服務本身是一樣的服務於所有的語言沙箱) - 不能確定這是否仍然有效,我也看到了DEADLINE_EXCEEDED錯誤代碼以及其中可能已經明確在此期間推出了這樣的情況下):Google App Engine Go HTTP request to a slow page

失敗可能也可能與您的網址foo:[email protected]中相當不尋常的「主機」部分的不正確解析有關。檢查你是否得到相同的錯誤,如果刪除foo:[email protected]部分。如果確實是這種情況,您可能想要向Google提出問題 - 網址似乎有效,但也適用於curl

+0

感謝丹。我發現了問題和解決方案。 我們需要使用標題指定HTTP認證信息。 urlfetch.make_fetch_call(RPC, URL, 方法= urlfetch.POST, 頭= { 「授權」: 「基本%的」 %base64.b64encode(URL_USERNAME + 「:」 + URL_PASSOWRD)}, ) – gsinha