拉我试图通过PHP从Twitter拉一些数据。我使用的是tmhOAuth插件,可以在这里找到。 https://github.com/themattharris/tmhOAuth/卷曲的错误,同时从Twitter
我写了一个基于关示例文件“streaming.php”,这也可以在上述GitHub的页面上找到我的代码。这里是我的代码:
require 'tmhOAuth.php';
$tmhOAuth = new tmhOAuth(array(
'consumer_key' => 'xxxhiddenxxx',
'consumer_secret' => 'xxxhiddenxxx',
'user_token' => 'xxxhiddenxxx',
'user_secret' => 'xxxhiddenxxx'
));
$method = 'http://stream.twitter.com/1/statuses/filter.json';
$params = array(
'follow' => '1307392917',
'count' => '5'
);
$tmhOAuth->streaming_request('POST', $method, $params, 'my_streaming_callback');
$tmhOAuth->pr($tmhOAuth);
那不是打印出任何我想拉的Twitter数据,并只显示了PR()命令写入调试信息。
在试图调试为什么我没有收到任何数据时,我进入并添加了一行到tmhOAuth.php,以便我可以看到cURL给出了什么错误。我用
echo curl_error($C);
是卷曲outputed错误这样做是:
转移以优异的读取数据剩余
我已经做了该错误一些研究关门,但我找不到任何有用的东西。有报道说,我找到有关内容长度有两件事情,但是当我挖成的代码,我看到tmhOAuth的作者已经解决了这些问题(和评论了他的修复并没有帮助)。
任何帮助?
更新1下面是使用curl_getinfo响应信息采集:
//Removed - an updated version is below
更新2由于下面我意识到Twitter的是给我用传输编码数据的评论:分块。我把这一行放入tmhOAuth.php中以强制执行分块数据:
curl_setopt($c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
这有点奏效。我不再得到任何卷曲的错误,但我WRITEFUNCTION回调仍然没有得到所谓的 - 所以我从来没有得到任何实际的数据。这里是我的卷曲对象的输出再次:
[response] => Array
(
[content-length] => 0
[headers] => Array
(
[content_type] => text/html; charset=iso-8859-1
[server] => Jetty(6.1.25)
)
[code] => 416
[response] => 1
[info] => Array
(
[url] => http://stream.twitter.com/1/statuses/filter.json
[content_type] => text/html; charset=iso-8859-1
[http_code] => 416
[header_size] => 116
[request_size] => 532
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.118553
[namelookup_time] => 0.043927
[connect_time] => 0.070477
[pretransfer_time] => 0.07049
[size_upload] => 25
[size_download] => 0
[speed_download] => 0
[speed_upload] => 210
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0.118384
[redirect_time] => 0
[request_header] => POST /1/statuses/filter.json HTTP/1.0
User-Agent: themattharris' HTTP Client
Host: stream.twitter.com
Accept: */*
Authorization: OAuth oauth_consumer_key="xxxhiddenxxx", oauth_nonce="xxxhidden", oauth_signature="xxxhidden", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1308226585", oauth_token="xxxhiddenxxx", oauth_version="1.0"
Content-Length: 25
Content-Type: application/x-www-form-urlencoded
)
)
)
更新3:夫妇的事情,到目前为止我已经想通了......我从POST请求删除“计数”的参数,现在的页面看起来永远占有。我想这意味着它只是下载吨数据和吨数据,所以我暂停了一些流式回调函数,设置为5次循环后杀死页面。
我这样做,并让它坐很长一段时间。大约5分钟后,页面完成加载,并向我展示了我收集的数据。它看起来像我已经得到每次跑通过时间没有数据 - 仅行字符的结尾。所以,对于我下载的每一条数据都需要一分钟的时间,即使如此,显示的唯一数据也是行结束字符。奇怪的?这是一个Twitter的问题或卷曲问题?
您得到的响应头是否使用Content-Length,还是使用分块的Transfer-Encoding?这可能提供一个提示。 – ribram 2011-06-15 20:43:54
不知道如何检查,所以我刚刚发布了所有我能找到的回复信息。 – jwegner 2011-06-15 21:30:28
它看起来像它是分块的(请参阅更新顶部附近的content-length和transfer_encoding)。我看到了一个有问题的服务器分块回复的例子会导致这个问题,所以这可能是一个问题。您需要网络跟踪或curl数据包调试转储以尝试并确认它。这只是一个猜测,我会等待,看看你是否有任何其他想法,然后再走这条道路。 – ribram 2011-06-15 22:18:46