2009-07-29 16 views
9

これは比較的単純明快なことであり、この機会に私のGoogleスキルは単に失敗したと思います。私は、PHPがPOST HTTPリクエストを実行するようにしたい、基本的な認証保護されたリソースを持っています。Issue FORM POSTリクエストHTTP基本認証を使用したPHPから

私は認証注入しようとしている:動作しているように見えませんでしたヘッダに基本的な(暗号化されたU/Pデータ)を - ので、私は、私はStackOverflowの意味Greyskullの力がどのガイダンスを提供することができ、疑問に思います。

$req .= "&cmd=_initiate_query"; 
$header = "POST /someendpoint HTTP/1.1\r\n". 
     "Host:example.com\n". 
     "Content-Type: application/x-www-form-urlencoded\r\n". 
     "User-Agent: PHP-Code\r\n". 
     "Content-Length: " . strlen($req) . "\r\n". 
     "Connection: close\r\n\r\n"; 
$fp = fsockopen ('ssl://example.com', 443, $errno, $errstr, 30); 
if (!$fp) { 
    // HTTP ERROR 
} else { 
    fputs ($fp, $header . $req); 
    while (!feof($fp)) { 
     $result .= fgets ($fp, 128); 
    } 
    fclose ($fp); 
} 
+0

これにcurlを使用しようとしましたか(またはアクセス権がありますか?) – bumperbox

+0

良い点、私が述べたはずのもの。私はphp.iniの変更の必要条件を最小限に抑えようとしています。 私は既にSSLを行うためにOpenSSL拡張を有効にしなければなりませんでした。これは苦痛であり、CURLはオプションかもしれませんが、CURLを使わずにすべての手段を探索したいと考えています。 –

答えて

3

にPOST変数に転送するように、それを使用して、私の例です:

$header = "POST /someendpoint HTTP/1.1\r\n". 
     "Host:example.com\n". 
     "Content-Type: application/x-www-form-urlencoded\r\n". 
     "User-Agent: PHP-Code\r\n". 
     "Content-Length: " . strlen($req) . "\r\n". 
     "Authorization: Basic ".base64_encode($username.':'.$password)."\r\n". 
     "Connection: close\r\n\r\n"; 

を動作するはず - それは基本認証システムですか? CharlesProxyのようなものを使って生のヘッダーデータを見て、それが認証であることを確認することが価値があるかもしれません(そして認証文字列も同様にコピーできます)。

+0

ありがとうRichy、それは私が持っていたものです - 私は英国の英語(つまり認可)でそれを書いたのかどうかは分かりません。このアプローチをさらに検討します。 –

+1

指が交差しました:ブリットとして、私は認証/許可の伝票を自分で数回作りました。 いくつかの認証サイトでは、HTTP_REFERER(sic)ヘッダーで「追加認証」をチェックし、Cookieも使用しています(ログインを自動化するための複雑な機能! CharlesProxy(またはMicrosoftのFiddler)は、ブラウザが何を送信しているのかを見て、それをコード内で複製できるようにします。 –

-2

ここでは、POSTリクエストを実行するために使用する関数を示します。うまくいけば、それはあなたがやりたいことができます。

function http_post($server, $port, $url, $vars) { 

// get urlencoded vesion of $vars array 
$urlencoded = ""; 

foreach ($vars as $Index => $Value) 
    $urlencoded .= urlencode($Index) . "=" . urlencode($Value) . "&"; 

$urlencoded = substr($urlencoded,0,-1); 

$headers = "POST $url HTTP/1.0\r\n" 
. "Content-Type: application/x-www-form-urlencoded\r\n" 
. "Content-Length: ". strlen($urlencoded) . "\r\n\r\n"; 

$fp = fsockopen($server, $port, $errno, $errstr, 10); 
if (!$fp) return "ERROR: fsockopen failed.\r\nError no: $errno - $errstr"; 

fputs($fp, $headers); 
fputs($fp, $urlencoded); 

$ret = ""; 
while (!feof($fp)) $ret .= fgets($fp, 1024); 

fclose($fp); 
return $ret; } 

そしてここでは、使用してAPI

$response = http_post("www.nochex.com", 80, "/nochex.dll/apc/apc", $_POST); 
+0

ありがとうございますが、それは私が持っているものとほとんど同じで、HTTP基本認証の問題を扱っていません。 –

関連する問題