2016-07-17 7 views
1

私は、このデータはクエリ文字列パラメータの値として、JSONデータとURLの構築

$data = array('username' => 'myname', 
       'password' => 'mypass' 
      ); 
$json = json_encode($data); 

どのように私はこの

'http://example.com/login/?data=' 

次のようになりますURLに変数としてJSONを渡すことができています「:データを渡されていない400」エラー

$data = array('username' => 'myname', 
      'password' => 'mypass' 
     ); 

$data_string = json_encode($data); 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_POST, TRUE); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($curl, CURLOPT_URL, 'http://example.com/login/?data='); //also 'http://example.com/login/' 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
      'Content-Type: application/json', 
      'Accept: application/json', 
      'Content-Length: ' . strlen($data_string) 
     )); 
curl_setopt($curl, CURLOPT_HEADER, TRUE); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); 

// Exec 
$response = curl_exec($curl); 
$info = curl_getinfo($curl); 
curl_close($curl); 

答えて

3

URL-encodedする必要がありますクエリ文字列で使用される任意のデータを、私が試したし、取得したものです。

$url = 'http://example.com/login/' . http_build_query([ 
    'data' => json_encode([ 
     'username' => 'myname', 
     'password' => 'mypass' 
    ]) 
]); 

http_build_query()パラメータの連想配列を取り、すべての適切なエンコーディングを適用し、あなたのために全体のクエリ文字列を構築します。

URLが返さ:

http://example.com/login/data=%7B%22username%22%3A%22myname%22%2C%22password%22%3A%22mypass%22%7D 
+0

どうすれば投稿できますか? – Marth

+0

@Marth URLにすべてのデータを入れているので、POSTは必要ありませんが、http://php.net/manual/en/curl.examples.php#88055データをPOSTするにはURLに含めないでください。POST本体としてJSONを送信してください。対処がずっと簡単で、長さ制限はありません。 – Brad

+0

どうすれば(400,200 ...)のようなステータスを見ることができますか? – Marth

0

これは、あなたはかなりありますが、これを行うことが可能です。

$data = array('username' => 'myname', 
       'password' => 'mypass' 
      ); 
$json = json_encode($data); 

$url = 'http://example.com/login/?data=' . urlencode($json); 

これはあなたが望むことができる安全なURLになります。

関連する問題