标签: urlfetch

GoogleAppEngine urlfetch超时异常

使用GAE urlfetch时,有没有人遇到以下异常的经验?

      DownloadError: ApplicationError: 2 timed out
Run Code Online (Sandbox Code Playgroud)

我正在尝试发送HTTP POST请求.像这样:

      result = urlfetch.fetch('http://api.nathan.com:8080/Obj/',
                              method='POST',
                              payload=postdata,
                              deadline=10)
Run Code Online (Sandbox Code Playgroud)

我已经尝试将截止日期设置为最大值(10秒).来自命令行的请求(使用curl或httplib2)大约需要一秒钟.

       nchong@almond ~ $ time curl
                         -d "<Obj><a>1</a><b>n</b></Obj>"
                         http://api.nathan.com:8080/Obj/
       agd1c2VyYXBpcgoLEgRTZXNzGAIM      #< key returned by call
       real 0m1.109s
       user 0m0.003s
       sys  0m0.009s
Run Code Online (Sandbox Code Playgroud)

这是来自dev appserver的curl请求的输出(我正在使用appengine-rest-server):

INFO     __init__.py:819] adding models from module __main__
INFO     __init__.py:867] added model Obj with type <class '__main__.Obj'>
INFO     dev_appserver.py:3243] "POST /Obj HTTP/1.1" 200 -
INFO     dev_appserver_index.py:205] Updating /path/to/index.yaml
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用urlfetch时的输出:

ERROR    __init__.py:388] ApplicationError: 2 timed out
Traceback (most recent call last):
  File "/path/to/webapp/__init__.py", line …
Run Code Online (Sandbox Code Playgroud)

google-app-engine exception urlfetch

11
推荐指数
1
解决办法
3992
查看次数

如何使用PHP中的fetch()API POST方法获取数据?

我正在尝试使用fetch()API POST方法来获取PHP中的POST数据.

这是我尝试过的:

var x = "hello";
fetch(url,{method:'post',body:x}).then(function(response){
    return response.json();
});
Run Code Online (Sandbox Code Playgroud)

PHP:

<?php
if(isset($_GET['x']))
{
    $get = $_GET['x'];
    echo $get;
}
?>
Run Code Online (Sandbox Code Playgroud)

它是否正确?

fetch urlfetch fetch-api

10
推荐指数
5
解决办法
2万
查看次数

获取url时的UnicodeEncodeError

我有这个问题尝试使用lxml获取HTML文档中的所有文本节点,但我得到一个UnicodeEncodeError : 'ascii' codec can't encode character u'\xe9' in position 8995: ordinal not in range(128). 但是,当我试图找出这个页面的编码类型(encoding = chardet.detect(response)['encoding'])时,它说它是utf-8.单个页面有utf-8和ascii似乎很奇怪.实际上,这个:

fromstring(response).text_content().encode('ascii', 'replace')
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.

这是我的代码:

from lxml.html import fromstring
import urllib2
import chardet
request = urllib2.Request(my_url)
request.add_header('User-Agent',
                   'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)')   
request.add_header("Accept-Language", "en-us")
response = urllib2.urlopen(request).read()

print encoding
print fromstring(response).text_content()
Run Code Online (Sandbox Code Playgroud)

输出:

utf-8
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8995: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?请记住,我想用其他几个页面来做这个,所以我不想单独编码.

更新:

也许还有其他事情在这里发生.当我在终端上运行这个脚本时,我得到一个正确的输出但是当它在SublimeText中运行时,我得到UnicodeEncodeError ...¿?

UPDATE2:

当我使用此输出创建文件时,也会发生这种情况..encode('ascii', 'replace')工作,但我想有一个更通用的解决方案. …

python unicode encoding urlfetch python-unicode

9
推荐指数
1
解决办法
3941
查看次数

如何使用谷歌应用程序脚本获取wordpress管理页面

我需要在我的Wordpress博客管理区域内获取一个页面.以下脚本:

function fetchAdminPage() {
   var url = "http://www.mydomain.invalid/wp/wp-admin/wp-login.php";
   var options = {
      "method": "post",
      "payload": {
      "log": "admin",
      "pwd": "password",
      "wp-submit": "Login",
      "redirect_to":"http://www.mydomain.invalid/wp/wp-admin/edit-comments.php",
      "testcookie": 1
      }
   };
   var response = UrlFetchApp.fetch(url, options);
   ...
}
Run Code Online (Sandbox Code Playgroud)

执行没有错误.无论如何,response.getContentText()返回登录页面,我无法访问http://www.mydomain.invalid/wp/wp-admin/edit-comments.php页面,这是我想要获取的页面.有关如何做到这一点的任何想法?

authentication wordpress urlfetch google-apps-script

9
推荐指数
1
解决办法
4519
查看次数

如何在Google App Engine中禁止urlfetch标头警告?

每当我在GAE上使用urlfetch请求外部URL时,我都会收到以下警告:

WARNING  2012-03-16 15:37:21,474 urlfetch_stub.py:428] Stripped prohibited headers from URLFetch request: ['Content-Length']
Run Code Online (Sandbox Code Playgroud)

我明白为什么会这样,而且我无法阻止潜在的问题.有没有办法可以抑制这个警告,以免堵塞日志?当然,我仍然想知道urlfetch想要记录的任何其他警告/错误.

python google-app-engine urlfetch

8
推荐指数
1
解决办法
2006
查看次数

google apps 脚本 ==&gt; UrlFetchApp、方法 GET 和 cookie

我使用 UrlFetchApp 发送用户和密码(POST 方法)。获取cookie后,并在其他请求中使用(GET方法)。但是这个新请求不起作用,我认为这个 cookie 在这个新请求中没有正确使用。谁能帮我?

  var opt ={
    "method":"post",
    "User-Agent" : "Mozilla/5.0",
    "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language" : "en-US,en;q=0.5",    
    "payload": this.payload.toString(), 
    "followRedirects" : false
  };
  var response = UrlFetchApp.fetch("https://edas.info/addTopic.php?c=19349",opt);
  var resp1=response.getContentText();    
  Logger.log(resp1);  
  response.getResponseCode();

  var headers = response.getAllHeaders();
  var cookies = headers['Set-Cookie']; 
  for (var i = 0; i < cookies.length; i++) {
    cookies[i] = cookies[i].split( ';' )[0];
  };


  opt = {
    "method" : "get",
    "User-Agent" : "Mozilla/5.0",
    "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language" : "en-US,en;q=0.5",    
    "headers": {
      "Cookie": cookies.join(';')
    },
    "followRedirects" : false …
Run Code Online (Sandbox Code Playgroud)

cookies urlfetch google-apps-script

8
推荐指数
1
解决办法
1万
查看次数

调用URLFetch失败,应用程序错误5为url x

背景:

我正在使用谷歌应用引擎,我的网站爬虫有一个奇怪的错误.

我有一个后端,每晚会自动抓取一个网站.由于php中的时间限制,这是由推送到pushQueue的任务发起的.

问题:

当我手动运行创建任务的脚本时,任务按预期完成,没有错误.但是当cron启动任务时,我收到以下错误.

调用URLFetch失败,应用程序错误5为url x

码:

function url_get_contents ($Url) {
    global $retry;
    try {
        if (!function_exists('curl_init')){ 
            die('CURL is not installed!');
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $Url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    } catch (Exception $e) {
        syslog(LOG_INFO, 'Caught exception: ',  $e->getMessage());
        if($retry > 0){
            $retry -= 1;
            return url_get_contents($Url);
        }
        else{
            return null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢syslog我可以看到$ url很好,这让我发疯,因为当手动启动完全相同的脚本而不是通过cron时它会起作用.

我怎样才能解决这个问题?

提前致谢.

php cron google-app-engine curl urlfetch

8
推荐指数
1
解决办法
418
查看次数

为什么要从Google App Engines导入urlfetch?

在Google App Engines中,我获得了此代码,可帮助通过其URL获取任何网页的HTML代码:

from google.appengine.api import urlfetch
url = "http://www.google.com/"
result = urlfetch.fetch(url)
if result.status_code == 200:
doSomethingWithResult(result.content)
Run Code Online (Sandbox Code Playgroud)

我不明白这里有一件事(事实上还有很多其他事情)为什么在这段代码中建议从google.appengine.api导入urlfecth?Python没有自己的命令吗?

python import google-app-engine urlfetch

7
推荐指数
2
解决办法
3203
查看次数

App Engine:urlfetch的替代品?似乎非常不可靠

我在我的应用程序中使用urlfetch,虽然在开发环境中一切都运行良好,但我发现urlfetch在实际部署时非常不可靠.有时它可以正常工作(检索数据),但几分钟之后它可能什么也没有返回,然后在几分钟之后再次正常工作.这是非常不可接受的.我已经检查过以确保它不是问题的源URL(YQL),而且,一切都在开发环境中正常工作.

我可以试试第三方图书馆吗?

示例代码:

url = "http://query.yahooapis.com/v1/public/yql?q=%s&format=json" % urllib.quote_plus(query)
result = urlfetch.fetch(url, deadline=10)

if result.status_code == 200:
    r = json.loads(result.content)
else:
    return

a = r['query']['results']
# Do stuff with 'a'
Run Code Online (Sandbox Code Playgroud)

有时它会按预期工作,但有时候 - 完全随机而没有代码更改 - 我会得到这个错误:

a = r['query']['results']
TypeError: 'NoneType' object is unsubscriptable
Run Code Online (Sandbox Code Playgroud)

google-app-engine urlfetch

7
推荐指数
2
解决办法
1968
查看次数

UrlFetch的参数无效

我试图通过Google Apps脚本运行MongoLab(基于REST的MongoDB访问)查询.从记录器生成的URL如下所示
https://api.mongolab.com/api/1/databases/abcd/collections/efgh?apiKey=XXXXXXXXXXXXXXXX&q= {"created_on":{"$ gte":"Thu Dec 06 00:00:00 PST 2012","$ lt":"Thu Dec 06 23:59:59 PST 2012"}}
当我在浏览器中输入此内容时,它可以正常工作并获取我正在寻找的响应.但是通过UrlFetchApp运行它会产生"无效参数"错误.我看到有几个帖子在同一行,但没有找到适合我的答案.Javascript代码如下

//start and end are JS date objects  
var query = { created_on : {'$gte': start, '$lt' : end} };
var url = MONGO_LAB_URLS.MAIN + "&q=" + Utilities.jsonStringify(query);  
Logger.log("Query URL : " + url);  
var response = UrlFetchApp.fetch(url);  
Run Code Online (Sandbox Code Playgroud)

我试过encodeURIComponent,但它不起作用 - 可能是我做错了.有什么建议可以解决这个问题吗?
谢谢.

urlfetch google-apps-script

7
推荐指数
2
解决办法
4238
查看次数