署名検証の過程で、サーバーは多くの場合、チャネル サーバーからユーザーの情報を取得する必要があります。通常、curl と file_get_contents の 2 つのメソッドがあります。
通常の状況では、このように使用しても問題ありません。
<span> 1</span><span>public</span><span>function</span> OauthPostExecuteNew(<span>$sign</span>,<span>$requestString</span>,<span>$request_serverUrl</span><span>){ </span><span> 2</span><span>$opt</span> = <span>array</span>("http"=><span>array</span><span>( </span><span> 3</span> "method"=>"GET", <span> 4</span> "header"=><span>array</span>("param:".<span>$requestString</span>,"oauthsignature:".<span>$sign</span>), <span> 5</span> "request_fulluri"=><span>true</span><span> 6</span><span> ) </span><span> 7</span><span> ); </span><span> 8</span><span> 9</span><span>$context</span> = <span>stream_context_create</span>(<span>$opt</span><span>); </span><span>10</span><span>$res</span>=<span>file_get_contents</span>(<span>$request_serverUrl</span>, <span>false</span>, <span>$context</span><span>); </span><span>11</span><span>12</span><span>return</span><span>$res</span><span>; </span><span>13</span> }
ただし、サーバーはプロキシを介して外部ネットワークに接続しているため、stream_context_create を使用してチャネル サーバーにアクセスする場合は、プロキシ パラメータを指定する必要があります。
そこで、上記のコードの $opt 配列に "proxy"=>$proxy フィールドを追加します。追加後もfile_get_contentsが正常に検証できないことが分かりました。
困ったので、公式サイトでfile_get_contentsを確認したら、proxyについての説明がなかったので、stream_context_createで検索したら、公式の説明にこんな一文がありました
params
params
必须是 $arr['parameter'] = $value 格式的关联数组。 请参考 context parameters 里的标准资源流参数列表。
那么 我们进入context_parameters 查看参数配置。因为我们使用的是HTTP方式,所以查看HTTP context
查看跟proxy相关的
次に、context_parameters に移動してパラメータ設定を表示しましょう。 HTTP を使用しているため、HTTP コンテキストをチェックしてプロキシ関連を表示します
proxy
stringURI 指定的代理服务器的地址。(e.g. tcp://proxy.example.com:5100).
request_fulluri
boolean当设置为
TRUE
时,在构建请求时将使用整个 URI 。(i.e. GET http://www.example.com/path/to/file.html HTTP/1.0)。 虽然这是一个非标准的请求格式,但某些代理服务器需要它。默认值是
は$ arr['parameter'] = $value 形式の連想配列である必要があります。 コンテキストパラメータの標準リソースフローパラメータリストを参照してください。FALSE
proxy
string
request_fulluri
boolean🎜🎜 TRUE 、リクエストを構築するときに URI 全体が使用されます。 (つまり、<em>GET http://www.example.com/path/to/file.html HTTP/1.0</em>)。 これは非標準のリクエスト形式ですが、一部のプロキシ サーバーではこれが必要です。 🎜🎜デフォルト値は <code>FALSE
です。🎜🎜🎜 プロキシのみが設定されていることがわかりましたが、request_fulluri は設定されていなかったので、request_fulluri=true を追加して検証に合格しました。 🎜🎜注: proxy パラメーターを使用する場合、具体的な理由はわかりませんが、http を tcp に変更する必要があります。分かりましたらここで更新します。 🎜
🎜
上記は、file_get_contents が Web ページのコンテンツを取得できない問題を、コンテンツの側面も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。 🎜
🎜
🎜