file_get_contents 获取不了网页内容,filegetcontents_PHP教程
Jul 12, 2016 am 08:59 AMfile_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 具体什么原因,不知道。等我查到了再到这里更新。

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana untuk menghantar halaman web ke desktop sebagai pintasan dalam pelayar Edge?

Kemungkinan sebab sambungan rangkaian adalah normal tetapi penyemak imbas tidak boleh mengakses halaman web

Bagaimana untuk menukar pelayar Microsoft Edge untuk dibuka dengan navigasi 360 - Bagaimana untuk menukar pembukaan dengan navigasi 360

Di mana untuk mendapatkan kod keselamatan Google

Perkara yang perlu dilakukan jika halaman web tidak boleh dibuka

Apakah yang perlu saya lakukan jika imej pada halaman web tidak boleh dimuatkan? 6 penyelesaian

Bagaimana untuk membuka php pada halaman web
