0

1 つのサイトでは、ユーザー名、パスワード、トークンの 3 つの変数にログインする必要があります。このデータは POST 経由で送信されます。

トークンもセクションを介して送信されます。

3 つの変数がすべてあり、file_get_contents 経由でログインしたいと考えています。

そのデータをどのように送信し、認証を成功させることができますか?

    function file_post_contents()
{

    $url = 'http://site.com/auth.php?' . session_name() . '=' . session_id();

    $login = 'jhon';
    $senha = 'doe';

    $token = '123456';  
    $_SESSION["token"] = $token;

    $postdata = http_build_query(
        array(
            'login' => $login,
            'senha' => $senha,
            'token' => $token, 
                            $_SESSION["token"] => $token
        )
    );

    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );

    if($login && $senha)
    {
        $opts['http']['header'] = ("Authorization: Basic " . base64_encode("$login:$senha"));
    }

    $context = stream_context_create($opts);
    return file_get_contents($url, false, $context);
}

変更されたコード。それは動作しません。

    function file_post_contents()
{

    $url = 'http://site.com/auth.php?' . session_name() . '=' . session_id();

    $login = 'jhon';
    $senha = 'doe';

    $token = '123456';  
    $_SESSION["token"] = $token;

    $postdata = http_build_query(
        array(
            'login' => $login,
            'senha' => $senha,
            'token' => $token
            //, $_SESSION["token"] => $token
        )
    );

    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded'
             . "\r\n" . "Authorization: Basic " . base64_encode("$login:$senha"). "\r\n",
            'content' => $postdata
        )
    );


    $context = stream_context_create($opts);
    return file_get_contents($url, false, $context);
}
4

2 に答える 2

0

$opts['http']['header']基本認証でオーバーライドしています。Content-type に追加するのではなく、Content-type を置き換えます。

于 2013-03-02T19:32:13.987 に答える
0

ヘッダーが間違って設定されている可能性があります。\r\nそのように追加してみてください

$opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'content' => $postdata
        )
    );

そして後でコードを下に

$opts['http']['header'] = $opts['http']['header'] . "Authorization: Basic " . base64_encode("$login:$senha") . "\r\n";

于 2013-03-02T19:27:08.160 に答える