代飞 發表於 2023-6-21 00:00:00

在WordPress中实现发送http请求的相关函数解析

<p>
在 PHP 中发送 Http 请求(GET / POST)有很多的方法,比如 file_get_contents() 函数、fopen() 函数或者 cURL 扩展,但由于服务器的情况不同,所以不一定会兼容所有情况,这样想要发送 Http 请求则需要经过一系列的判断,非常麻烦。</p>
<p>
不过 WordPress 提供了一个 WP_Http 的类来帮你做好兼容性的判断,你只需要调用里边的函数就能完成发送 Http 请求。下面我就简单的介绍一下这个类的常用函数。</p>
<p>
<strong>发送 GET 请求</strong></p>
<div>
<div>
<div id="highlighter_956865">
<div>
 </div>
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
</tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
 </div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
</td>
<td>
<div>
<div>
<code>/**</code>
</div>
<div>
<code> </code><code>*使用 WP_Http 类发送简单的 GET 请求</code>
</div>
<div>
<code> </code><code>*</code><code>http://www.endskin.com/wp_http/</code>
</div>
<div>
<code>*/</code>
</div>
<div>
<code>$http</code> <code>= </code><code>new</code> <code>WP_Http;</code>
</div>
<div>
<code>$result</code> <code>= </code><code>$http</code><code>-&gt;request( </code><code>'</code><code>http://www.endskin.com</code><code>'</code> <code>);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
上边的代码就把请求目标的信息存储到 $result 变量里了,$result 是一个数组,它有一下的键:</p>
<ul>
<li>
headers:返回的 headers 信息,是一个数组</li>
<li>
body:目标的内容,和在浏览器里直接看是一样的</li>
<li>
response:返回的代码,如果请求成功会返回 array( 'code'=&gt;200, 'message'=&gt;'OK' )</li>
<li>
cookies:Cookie 信息,是一个数组</li>
</ul>
<p>
也就是说目标的内容就是 $result['body']</p>
<p>
<strong>发送 POST 请求</strong></p>
<p>
如果需要发送 POST 请求就得用到 WP_Http-&gt;request() 的第二个参数了,下面看例子:</p>
<div>
<div>
<div id="highlighter_584007">
<div>
 </div>
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
</tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
 </div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
</td>
<td>
<div>
<div>
<code>/**</code>
</div>
<div>
<code> </code><code>*使用 WP_Http 类发送简单的 POST 请求</code>
</div>
<div>
<code> </code><code>*</code><code>http://www.endskin.com/wp_http/</code>
</div>
<div>
<code>*/</code>
</div>
<div>
<code>$http</code> <code>= </code><code>new</code> <code>WP_Http;</code>
</div>
<div>
<code>$post</code> <code>= </code><code>array</code><code>( </code><code>'name'</code> <code>=&gt; </code><code>'斌果'</code><code>, </code><code>'blog'</code> <code>=&gt; </code><code>'</code><code>http://www.bgbk.org</code><code>'</code> <code>);</code>
</div>
<div>
<code>$result</code> <code>= </code><code>$http</code><code>-&gt;request( </code><code>'</code><code>http://www.endskin.com</code><code>'</code><code>, </code><code>array</code><code>( </code><code>'method'</code> <code>=&gt; </code><code>'POST'</code><code>, </code><code>'body'</code> <code>=&gt; </code><code>$post</code> <code>) );</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
返回的$result 变量内容请参考上边的 GET 请求。</p>
<p>
<strong>需要验证的 POST 请求</strong></p>
<p>
假如你想在一些 RESTFul 的 API 提交一些信息,你首先需要进行验证,我们需要发送一个含有用户名和密码对的 base64 编码的字符串给 API,详细如下:</p>
<div>
<div>
<div id="highlighter_891241">
<div>
 </div>
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
</tr></tbody></table>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
 </div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
</td>
<td>
<div>
<div>
<code>// You would edit the following:</code>
</div>
<div>
<code>$username</code> <code>= </code><code>'denishua'</code><code>; </code><code>// login</code>
</div>
<div>
<code>$password</code> <code>= </code><code>'123456'</code><code>; </code><code>// password</code>
</div>
<div>
<code>$message</code> <code>= </code><code>"I'm posting with the API"</code><code>;</code>
</div>
<div>
<code>// Now, the HTTP request:</code>
</div>
<div>
<code>$api_url</code> <code>= </code><code>'</code><code>http://your.api.url/update.xml</code><code>'</code><code>;</code>
</div>
<div>
<code>$body</code> <code>= </code><code>array</code><code>( </code><code>'status'</code> <code>=&gt; </code><code>$message</code> <code>);</code>
</div>
<div>
<code>$headers</code> <code>= </code><code>array</code><code>( </code><code>'Authorization'</code> <code>=&gt; </code><code>'Basic '</code><code>.</code><code>base64_encode</code><code>(</code><code>"$username:$password"</code><code>) );</code>
</div>
<div>
<code>$request</code> <code>= </code><code>new</code> <code>WP_Http;</code>
</div>
<div>
<code>$result</code> <code>= </code><code>$request</code><code>-&gt;request( </code><code>$api_url</code> <code>, </code><code>array</code><code>( </code><code>'method'</code> <code>=&gt; </code><code>'POST'</code><code>, </code><code>'body'</code> <code>=&gt; </code><code>$body</code><code>, </code><code>'headers'</code> <code>=&gt; </code><code>$headers</code> <code>) );</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
WordPress 加入 WP_Http 类之后,就放弃了 Snoopy 这个 PHP Class,所以建议大家给 WordPress 写插件的时候,尽量使用 WP_Http 来做 HTTP 请求。</p>
頁: [1]
查看完整版本: 在WordPress中实现发送http请求的相关函数解析