为什么我的oAuth推文中有加号(+)?

时间:2010-07-27 18:46:41

标签: php codeigniter oauth twitter

我已经破解了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;
    }       
}

2 个答案:

答案 0 :(得分:1)

你的推文是$ status吗?在发布之前看看POST请求,我的猜测是_urlencode_rfc3986()转换它,以便当你想要“$ status =这是我的推文”时你得到“$ status = This + is + my + tweet”

答案 1 :(得分:0)

Twitter不支持“+”作为空间的转义,据我所知,这违反了标准。

您必须将+替换为%20。