我已经破解了oAuth并拥有了我的类文件。我正处于发布推文的最后阶段,所有作品除了所有单词都在推文中加上加号。
更改任何内容会导致签名不正确,Twitter会返回401错误。
那么如何消除这些优势呢?发布功能如下:
function post($token, $tokenSecret, $status)
{
// Default params
$params = array(
"oauth_version" => "1.0",
"oauth_nonce" => time(),
"oauth_timestamp" => time(),
"oauth_consumer_key" => $this->key,
"oauth_signature_method" => "HMAC-SHA1",
"oauth_token" => $token,
"status" => $status
);
uksort($params, 'strcmp');
// convert params to string
foreach ($params as $k => $v) {$pairs[] = $this->_urlencode_rfc3986($k).'='.$this->_urlencode_rfc3986($v);}
$concatenatedParams = implode('&', $pairs);
// form base string (first key)
$baseString= "POST&".$this->_urlencode_rfc3986($this->request_statuses_url)."&".$this->_urlencode_rfc3986($concatenatedParams);
// form secret (second key)
$secret = $this->_urlencode_rfc3986($this->secret)."&".$this->_urlencode_rfc3986($tokenSecret);
// make signature
$sig = $this->_urlencode_rfc3986(base64_encode(hash_hmac('sha1', $baseString, $secret, TRUE)));
// BUILD URL
$url = $this->request_statuses_url; // twitter update url
$paramString = $concatenatedParams."&oauth_signature=".$sig;
// Send to cURL
$result = $this->_http($url, $paramString);
if($result['httpCode'] == '200'){
// Return array
return $result;
}
else{
// Error
show_error($result['httpCode'], $result['httpCode']);
return FALSE;
}
}
答案 0 :(得分:1)
你的推文是$ status吗?在发布之前看看POST请求,我的猜测是_urlencode_rfc3986()转换它,以便当你想要“$ status =这是我的推文”时你得到“$ status = This + is + my + tweet”
答案 1 :(得分:0)
Twitter不支持“+”作为空间的转义,据我所知,这违反了标准。
您必须将+替换为%20。