当参数中的空格时,Twitter说“无法验证您”

时间:2014-01-04 20:35:38

标签: twitter encoding parameters oauth space

如果$ searchterm =“Chinmay”,下面的代码完全正常,但是当$ searchterm中有空格时,它的工作方式不正确。我尝试了很多编码,但没有运气。

第1部分 - 获取URL和参数

    $searchterm = "Chinmay+Patel";
    $params = array( "q" => $searchterm );
    $url = 'https://api.twitter.com/1.1/users/search.json';

第2节 - 建立签名

    $oauth = array(
        'oauth_consumer_key'        => \Config::get("oauth-4-laravel::consumers.Twitter.client_id"),
        'oauth_nonce'               => hash('SHA1', time()),
        'oauth_signature'           => '',
        'oauth_signature_method'    => 'HMAC-SHA1',
        'oauth_timestamp'           => time(),
        'oauth_token'               => $this->twitter_user->access_token,
        'oauth_version'             => '1.0'
    );

    foreach ($oauth as $key => $value)
    {
        if (empty($value)) continue;
        $oauth_vals[] = "{$key}={$value}";
    }

    if( !empty( $params ) ){
        foreach ($params as $key => $value) {
            if(empty($value)) continue;
            $oauth_vals[] = "{$key}={$value}";
        }
    }
    $base = 'GET&' . rawurlencode($url) . '&' . rawurlencode(implode('&', $oauth_vals) );// . '&'. implode( '&', $params);
    $composite_key      = rawurlencode(\Config::get("oauth-4-laravel::consumers.Twitter.client_secret")) . '&' . rawurlencode($this->twitter_user->secret);
    $oauth_signature    = base64_encode(hash_hmac('sha1', $base, $composite_key, true));
    $oauth['oauth_signature'] = rawurlencode($oauth_signature);

第3节 - 构建请求标题

    foreach ($oauth as $key => $value)
    {
        $auth_header[] = "{$key}=\"{$value}\"";
    }
    $auth_header = implode(', ', $auth_header);

第4节 - 建立网址并提出请求

    if( !empty( $params ) ){
        $url .= "?" . http_build_query( $params );
    }

    $verbose = fopen('php://temp', 'rw+');
    $options = array(
        CURLOPT_HTTPHEADER      => array("Authorization: OAuth {$auth_header}"),
        CURLOPT_HEADER          => false,
        CURLOPT_URL             => $url,
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_SSL_VERIFYPEER  => false,
        CURLOPT_HTTPGET         => true,

        // DEBUGGING
        CURLOPT_VERBOSE         => TRUE,
        CURLOPT_STDERR          => $verbose
    );

    $feed = curl_init();
    curl_setopt_array($feed, $options);
    $json = curl_exec($feed);
    curl_close($feed);
    $twitter_data = json_decode($json, true);
    rewind($verbose);

第5节 - 输出数据

    $verboseLog = stream_get_contents($verbose);
    echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n";

    var_dump( $twitter_data );

可能是什么问题?有点超出问题的范围,但此代码也不适用于多个参数。例如,如果我添加count参数,它会给我同样的错误。

0 个答案:

没有答案