2

重複の可能性:
Rest サーバー経由の Drupal ログイン

投稿データでコンテンツを取得するファイルにこのコードを使用していますが、エラーが発生しました

Warning: file_get_contents(http://50.116.19.49/rest/user/login.json): failed to open  
stream: HTTP request failed! HTTP/1.0 406 Not Acceptable: Unsupported request content type 
application/x-www-form-urlencoded in C:\xampp\htdocs\post.php on line 20

私のコードは

<?php

$postdata = http_build_query(
array(
    'var1' => 'myuser',
    'var2' => 'pwd'
)
);

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

$context  = stream_context_create($opts);

$result = file_get_contents('http://50.116.19.49/rest/user/login.json', false,    
$context);

?>

事前に感謝します。

4

3 に答える 3

2

関数 file_get_contents($request); の代わりに curl を使用できます。curl のコードは次のとおりです。

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL,$request);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_TIMEOUT, 15);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

 $xml_response = curl_exec($ch);

$request はあなたの URL です。

于 2012-10-23T04:53:20.327 に答える
1

file_get_contentsFALSEHTTP ストリーム ラッパーでもエラーが発生した場合に返します。エラーは、HTTP 応答のエラー状態を意味します。たとえば、406 Not Acceptable: Unsupported request content typeのような 400 範囲の HTTP ステータス コードです。

HTTP コンテキスト オプションを次のように設定することで、 「エラー時に FALSE」動作を無効にすることができます。ignore_errorsTRUE

'ignore_errors' = TRUE,

エラーの場合も、結果としてリクエストのレスポンスボディを取得します。

ステータス コード自体を取得するには、特殊$http_response_header変数を使用できます。

これらの設定と応答ヘッダーの解析方法については、HEAD first with PHP Streamsを参照してください。ただし、あなたの場合、応答本文には問題に関する詳細情報が既に含まれている可能性があります。

特定の問題では、リクエストのエンコーディングがサーバーでサポートされていることを再確認する必要があります。私はあなたのサーバーを知らないので、それについて多くを語ることはできません。エラーコードへの参照は、あなたにいくつかの光を当てるかもしれません. 使用しているContent-type: application/x-www-form-urlencodedに問題があるようです。

たとえば、このサイトの他の賢明な人々が私に言ったように、そのエンドポイントは Drupal です。もしそうなら、同様の質問で次のことが提案されました:

application/x-www-form-urlencodedサービス エンドポイントのコンテンツ タイプを有効にする必要があります。

サービス -> リソースの編集 -> 「サーバー」タブを選択 -> 「application/x-www-form-urlencoded」を有効にするだけです。

うまくいけば、これはあなたの役に立ちます。

于 2012-10-23T08:51:35.373 に答える
1

この特定のサーバーは、 を呼び出したときに POST データに JSON が含まれているように見える/login.jsonため、コードをいくつか書き直す必要があります。

  1. 構造を変更する$postdata:

    $postdata = json_encode(array(
        'var1' => 'myuser',
        'var2' => 'pwd'
    ));
    
  2. Content-Typeヘッダーを変更します。

    $opts = array('http' => array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/json',
        'content' => $postdata
    ));
    
于 2012-10-23T09:34:58.043 に答える