Home  >  Article  >  php教程  >  file_get_contents 获取不了网页内容,filegetcontents

file_get_contents 获取不了网页内容,filegetcontents

WBOY
WBOYOriginal
2016-06-13 08:46:361124browse

file_get_contents 获取不了网页内容,filegetcontents

服务器在做验签的过程中,经常需要向渠道服务器获取某个用户的信息。一般有两种方法,curl和file_get_contents。

一般情况下,像这样用,不会有问题。

<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时需要带上proxy参数,才能访问到渠道的服务器。

所以在上面代码 $opt 数组中带上"proxy"=>$proxy字段。加上之后发现file_get_contents仍然不能正常验签。

百思不解,遂到官网上来查查file_get_contents,发现并没有关于proxy的解释,然后搜stream_context_create,官方解释有这句话

<p><code class="parameter">params</code></p>
<p class="para">必须是 <em>$arr['parameter'] = $value</em> 格式的关联数组。 请参考 context parameters 里的标准资源流参数列表。</p>

那么 我们进入context_parameters 查看参数配置。因为我们使用的是HTTP方式,所以查看HTTP context

查看跟proxy相关的

 

<p class="para"><code class="parameter">proxy</code> <span class="type">string</span></p>
<p class="para">URI 指定的代理服务器的地址。(e.g. <em>tcp://proxy.example.com:5100</em>).</p>
<p class="para"><code class="parameter">request_fulluri</code> <span class="type">boolean</span></p>
<p class="para">当设置为 <code>TRUE</code> 时,在构建请求时将使用整个 URI 。(i.e. <em>GET http://www.example.com/path/to/file.html HTTP/1.0</em>)。 虽然这是一个非标准的请求格式,但某些代理服务器需要它。</p>
<p class="para">默认值是 <code>FALSE</code>.</p>

 

发现只配置了proxy,而并没有配置request_fulluri,遂加上request_fulluri=true,验证通过。

 

 

注意:使用proxy参数时需要把http 改为tcp 具体什么原因,不知道。等我查到了再到这里更新。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn