我正在编写一个与Twitter API集成的相当基本的Web应用程序。我正在使用jQuery和AJAX请求身份验证令牌Twitter,但我违反了异步跨站点请求策略或其他任何策略。
我会使用JSONP,但Twitter API需要POST。我已经读过我应该使用一个itermediate代理。我不知道涉及什么,找不到任何资源?我可以用PHP编写。
任何人都可以解释一下代理页面是什么吗?
更新
在阅读下面接受的答案之后,我写了一个PHP代理脚本,这就是我想出的并开始工作:
<?php
class proxy {
public $serviceURL;
public $postString;
public $headers;
public $response;
public function __construct($url) {
$this->serviceURL = $url;
$this->postStringify($_POST);
}
private function postStringify($postArray) {
$ps = '';
foreach($postArray as $key => $value) {
$ps .= $key . '=' . $value . '&';
}
rtrim($ps, '&');
$this->postString = $ps;
}
private function isCurlInstalled() {
return (in_array('curl', get_loaded_extensions())) ? true : false;
}
public function makeRequest() {
if ($this->isCurlInstalled()) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->serviceURL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->postString);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);
$this->response = curl_exec($ch);
if ($this->response === false) $this->response = curl_error($ch);
curl_close($ch);
} else {
$this->response = 'Need to install Curl!';
}
return $this->response;
}
public function debug() {
var_dump($this->response);
}
}
?>
并在另一个AJAX请求调用的文件中:
<?php
include ('proxy.php');
ini_set('display_errors',1);
error_reporting(E_ALL);
$consumerKey = 'myKEY!';
$consumerSecret = 'mySecret!';
$bearerTokenCredentials = $consumerKey . ':' . $consumerSecret;
$base64TokenCredentials = base64_encode($bearerTokenCredentials);
$authProxy = new proxy('https://api.twitter.com/oauth2/token/');
$authProxy->headers = array(
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Basic ' . $base64TokenCredentials,
);
$response = $authProxy->makeRequest();
if (is_null($response)) $authProxy->debug(); else echo $response;
?>
答案 0 :(得分:2)
代理脚本只会将您的POST数据传递给Twitter。
在您的客户端代码中,您将使用类似yourProxyScript.php
的内容,而不是使用Twitter的URL。在该代理脚本中,您将从$_POST
以及您需要的任何其他数据和POST it to the Twitter API URL using cURL中获取所有内容。