【发布时间】:2014-01-29 17:39:49
【问题描述】:
我对新的 twitter api 有一个奇怪的问题。我按照这个question 的非常好的答案在twitter 中创建了一个搜索,并使用了here 的TwitterAPIExchange.php。
只要我使用 CURL 从我的服务器直接调用它,一切正常。但是在实时环境中,我必须使用带有基本身份验证的代理。
我所做的只是将代理身份验证添加到 performRequest 函数中:
if(defined('WP_PROXY_HOST') && defined('WP_PROXY_PORT') && defined('WP_PROXY_USERNAME') && defined('WP_PROXY_PASSWORD'))
{
$options[CURLOPT_HTTPPROXYTUNNEL] = 1;
$options[CURLOPT_PROXYAUTH] = CURLAUTH_BASIC;
$options[CURLOPT_PROXY] = WP_PROXY_HOST . ':' . WP_PROXY_PORT;
$options[CURLOPT_PROXYPORT] = WP_PROXY_PORT;
$options[CURLOPT_PROXYUSERPWD] = WP_PROXY_USERNAME . ':' . WP_PROXY_PASSWORD;
}
如果没有代理,我会收到 JSON 响应。但是有了代理,我得到了:
HTTP/1.1 200 连接已建立 HTTP/1.1 400 错误请求 内容类型:应用程序/json;字符集=utf-8 日期:2013 年 12 月 20 日星期五 09:22:59 UTC 服务器:tfe 严格的传输安全:max-age=631138519 内容长度:61 代理连接:保持活动 连接:保持活动 设置Cookie:guest_id=v1%3A138753137985809686;域名=.twitter.com;路径=/;过期=周日,2015 年 12 月 20 日 09:22:59 UTC 年龄:0 {"errors":[{"message":"Bad Authentication data","code":215}]}
我尝试在本地环境中使用 Charles Proxy 模拟代理,并且成功了。
我假设代理要么没有发送身份验证标头,要么正在以某种方式更改数据。
任何有线索的人......
编辑: 使用 HTTP API 有效,但 HTTPS 失败。我已经尝试将 CURLOPT_SSL_VERIFYPEER 和 CURLOPT_SSL_VERIFYHOST 设置为 FALSE,但是 twitter SSL 是有效的,所以不推荐这样做
【问题讨论】: