php实现post和get
file_get_contents版本:
01 |
<?php |
02 |
/** |
03 |
* 发送post请求
|
04 |
* @param string $url 请求地址
|
05 |
* @param array $post_data post键值对数据
|
06 |
* @return string
|
07 |
*/
|
08 |
function send_post( $url ,
$post_data ) {
|
09 |
10 |
$postdata = http_build_query( $post_data );
|
11 |
$options = array (
|
12 |
'http' => array (
|
13 |
'method' => 'POST' ,
|
14 |
'header' => 'Content-type:application/x-www-form-urlencoded' ,
|
15 |
'content' => $postdata ,
|
16 |
'timeout' => 15 * 60 // 超时时间(单位:s)
|
17 |
)
|
18 |
);
|
19 |
$context = stream_context_create( $options );
|
20 |
$result = file_get_contents ( $url , false,
$context );
|
21 |
22 |
return $result ;
|
23 |
} |
使用如下:
1 |
$post_data = array (
|
2 |
'username' => 'stclair2201' ,
|
3 |
'password' => 'handan'
|
4 |
); |
5 |
send_post( 'http://blog.snsgou.com' ,
$post_data );
|
实战经验:
当我利用上述代码给另一台服务器发送http请求时,发现,如果服务器处理请求时间过长,本地的PHP会中断请求,即所谓的超时中断,第一个怀疑的是PHP本身执行时间的超过限制,但想想也不应该,因为老早就按照这篇文章设置了“PHP执行时间限制”(【推荐】PHP上传文件大小限制大全 ),仔细琢磨,想想,应该是http请求本身的一个时间限制,于是乎,就想到了怎么给http请求时间限制搞大一点。。。。。。查看PHP手册,果真有个参数 “ timeout ”,默认不知道多大,当把它的值设大一点,问题得已解决,弱弱地做个笔记~~~
Socket版本:
01 |
/** |
02 |
* Socket版本
|
03 |
* 使用方法:
|
04 |
* $post_string = "app=socket&version=beta";
|
05 |
* request_by_socket('blog.snsgou.com', '/restServer.php', $post_string);
|
06 |
*/
|
07 |
function request_by_socket( $remote_server , $remote_path , $post_string , $port = 80, $timeout = 30) {
|
08 |
$socket = fsockopen ( $remote_server ,
$port , $errno ,
$errstr , $timeout );
|
09 |
if (! $socket )
die ( "$errstr($errno)" );
|
10 |
fwrite( $socket ,
"POST $remote_path HTTP/1.0" );
|
11 |
fwrite( $socket ,
"User-Agent: Socket Example" );
|
12 |
fwrite( $socket ,
"HOST: $remote_server" );
|
13 |
fwrite( $socket ,
"Content-type: application/x-www-form-urlencoded" );
|
14 |
fwrite( $socket ,
"Content-length: " . ( strlen ( $post_string ) + 8) .
"" );
|
15 |
fwrite( $socket ,
"Accept:*/*" );
|
16 |
fwrite( $socket ,
"" );
|
17 |
fwrite( $socket ,
"mypost=$post_string" );
|
18 |
fwrite( $socket ,
"" );
|
19 |
$header = "" ;
|
20 |
while ( $str = trim( fgets ( $socket , 4096))) {
|
21 |
$header .= $str ;
|
22 |
}
|
23 |
24 |
$data = "" ;
|
25 |
while (! feof ( $socket )) {
|
26 |
$data .= fgets ( $socket , 4096);
|
27 |
}
|
28 |
29 |
return $data ;
|
30 |
} |
Curl版本:
01 |
/** |
02 |
* Curl版本
|
03 |
* 使用方法:
|
04 |
* $post_string = "app=request&version=beta";
|
05 |
* request_by_curl('http://blog.snsgou.com/restServer.php', $post_string);
|
06 |
*/
|
07 |
function request_by_curl( $remote_server ,
$post_string ) {
|
08 |
$ch = curl_init();
|
09 |
curl_setopt( $ch , CURLOPT_URL,
$remote_server );
|
10 |
curl_setopt( $ch , CURLOPT_POSTFIELDS,
'mypost=' . $post_string );
|
11 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);
|
12 |
curl_setopt( $ch , CURLOPT_USERAGENT,
"snsgou.com's CURL Example beta" );
|
13 |
$data = curl_exec( $ch );
|
14 |
curl_close( $ch );
|
15 |
16 |
return $data ;
|
17 |
} |
Curl版本(2)
01 |
/** |
02 |
* 发送HTTP请求
|
03 |
*
|
04 |
* @param string $url 请求地址
|
05 |
* @param string $method 请求方式 GET/POST
|
06 |
* @param string $refererUrl 请求来源地址
|
07 |
* @param array $data 发送数据
|
08 |
* @param string $contentType
|
09 |
* @param string $timeout
|
10 |
* @param string $proxy
|
11 |
* @return boolean
|
12 |
*/
|
13 |
function send_request( $url ,
$data , $refererUrl = '' , $method = 'GET' ,
$contentType = 'application/json' ,
$timeout = 30, $proxy = false) {
|
14 |
$ch = null;
|
15 |
if ( 'POST' === strtoupper ( $method )) {
|
16 |
$ch = curl_init( $url );
|
17 |
curl_setopt( $ch , CURLOPT_POST, 1);
|
18 |
curl_setopt( $ch , CURLOPT_HEADER,0 );
|
19 |
curl_setopt( $ch , CURLOPT_FRESH_CONNECT, 1);
|
20 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
|
21 |
curl_setopt( $ch , CURLOPT_FORBID_REUSE, 1);
|
22 |
curl_setopt( $ch , CURLOPT_TIMEOUT,
$timeout );
|
23 |
if ( $refererUrl ) {
|
24 |
curl_setopt( $ch , CURLOPT_REFERER,
$refererUrl );
|
25 |
}
|
26 |
if ( $contentType ) {
|
27 |
curl_setopt( $ch , CURLOPT_HTTPHEADER,
array ( 'Content-Type:' . $contentType ));
|
28 |
}
|
29 |
if ( is_string ( $data )){
|
30 |
curl_setopt( $ch , CURLOPT_POSTFIELDS,
$data );
|
31 |
} else {
|
32 |
curl_setopt( $ch , CURLOPT_POSTFIELDS, http_build_query( $data ));
|
33 |
}
|
34 |
} else if ( 'GET' === strtoupper ( $method )) {
|
35 |
if ( is_string ( $data )) {
|
36 |
$real_url = $url . ( strpos ( $url ,
'?' ) === false ? '?' : '' ).
$data ;
|
37 |
} else {
|
38 |
$real_url = $url . ( strpos ( $url ,
'?' ) === false ? '?' : '' ). http_build_query( $data );
|
39 |
}
|
40 |
41 |
$ch = curl_init( $real_url );
|
42 |
curl_setopt( $ch , CURLOPT_HEADER, 0);
|
43 |
curl_setopt( $ch , CURLOPT_HTTPHEADER,
array ( 'Content-Type:' . $contentType ));
|
44 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
|
45 |
curl_setopt( $ch , CURLOPT_TIMEOUT,
$timeout );
|
46 |
if ( $refererUrl ) {
|
47 |
curl_setopt( $ch , CURLOPT_REFERER,
$refererUrl );
|
48 |
}
|
49 |
} else {
|
50 |
$args = func_get_args();
|
51 |
return false;
|
52 |
}
|
53 |
54 |
if ( $proxy ) {
|
55 |
curl_setopt( $ch , CURLOPT_PROXY,
$proxy );
|
56 |
}
|
57 |
$ret = curl_exec( $ch );
|
58 |
$info = curl_getinfo( $ch );
|
59 |
$contents = array (
|
60 |
'httpInfo' => array (
|
61 |
'send' => $data ,
|
62 |
'url' => $url ,
|
63 |
'ret' => $ret ,
|
64 |
'http' => $info ,
|
65 |
)
|
66 |
);
|
67 |
68 |
curl_close( $ch );
|
69 |
return $ret ;
|
70 |
} |
调用 WCF接口 的一个例子:$json = restRequest($r_url,'POST', json_encode($data));
以上就介绍了php实现post和get,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

“你的组织要求你更改PIN消息”将显示在登录屏幕上。当在使用基于组织的帐户设置的电脑上达到PIN过期限制时,就会发生这种情况,在该电脑上,他们可以控制个人设备。但是,如果您使用个人帐户设置了Windows,则理想情况下不应显示错误消息。虽然情况并非总是如此。大多数遇到错误的用户使用个人帐户报告。为什么我的组织要求我在Windows11上更改我的PIN?可能是您的帐户与组织相关联,您的主要方法应该是验证这一点。联系域管理员会有所帮助!此外,配置错误的本地策略设置或不正确的注册表项也可能导致错误。即

Windows11将清新优雅的设计带到了最前沿;现代界面允许您个性化和更改最精细的细节,例如窗口边框。在本指南中,我们将讨论分步说明,以帮助您在Windows操作系统中创建反映您的风格的环境。如何更改窗口边框设置?按+打开“设置”应用。WindowsI转到个性化,然后单击颜色设置。颜色更改窗口边框设置窗口11“宽度=”643“高度=”500“>找到在标题栏和窗口边框上显示强调色选项,然后切换它旁边的开关。若要在“开始”菜单和任务栏上显示主题色,请打开“在开始”菜单和任务栏上显示主题

默认情况下,Windows11上的标题栏颜色取决于您选择的深色/浅色主题。但是,您可以将其更改为所需的任何颜色。在本指南中,我们将讨论三种方法的分步说明,以更改它并个性化您的桌面体验,使其具有视觉吸引力。是否可以更改活动和非活动窗口的标题栏颜色?是的,您可以使用“设置”应用更改活动窗口的标题栏颜色,也可以使用注册表编辑器更改非活动窗口的标题栏颜色。若要了解这些步骤,请转到下一部分。如何在Windows11中更改标题栏的颜色?1.使用“设置”应用按+打开设置窗口。WindowsI前往“个性化”,然

您是否在Windows安装程序页面上看到“出现问题”以及“OOBELANGUAGE”语句?Windows的安装有时会因此类错误而停止。OOBE表示开箱即用的体验。正如错误提示所表示的那样,这是与OOBE语言选择相关的问题。没有什么可担心的,你可以通过OOBE屏幕本身的漂亮注册表编辑来解决这个问题。快速修复–1.单击OOBE应用底部的“重试”按钮。这将继续进行该过程,而不会再打嗝。2.使用电源按钮强制关闭系统。系统重新启动后,OOBE应继续。3.断开系统与互联网的连接。在脱机模式下完成OOBE的所

任务栏缩略图可能很有趣,但它们也可能分散注意力或烦人。考虑到您将鼠标悬停在该区域的频率,您可能无意中关闭了重要窗口几次。另一个缺点是它使用更多的系统资源,因此,如果您一直在寻找一种提高资源效率的方法,我们将向您展示如何禁用它。不过,如果您的硬件规格可以处理它并且您喜欢预览版,则可以启用它。如何在Windows11中启用任务栏缩略图预览?1.使用“设置”应用点击键并单击设置。Windows单击系统,然后选择关于。点击高级系统设置。导航到“高级”选项卡,然后选择“性能”下的“设置”。在“视觉效果”选

在Windows11上的显示缩放方面,我们都有不同的偏好。有些人喜欢大图标,有些人喜欢小图标。但是,我们都同意拥有正确的缩放比例很重要。字体缩放不良或图像过度缩放可能是工作时真正的生产力杀手,因此您需要知道如何对其进行自定义以充分利用系统功能。自定义缩放的优点:对于难以阅读屏幕上的文本的人来说,这是一个有用的功能。它可以帮助您一次在屏幕上查看更多内容。您可以创建仅适用于某些监视器和应用程序的自定义扩展配置文件。可以帮助提高低端硬件的性能。它使您可以更好地控制屏幕上的内容。如何在Windows11

屏幕亮度是使用现代计算设备不可或缺的一部分,尤其是当您长时间注视屏幕时。它可以帮助您减轻眼睛疲劳,提高易读性,并轻松有效地查看内容。但是,根据您的设置,有时很难管理亮度,尤其是在具有新UI更改的Windows11上。如果您在调整亮度时遇到问题,以下是在Windows11上管理亮度的所有方法。如何在Windows11上更改亮度[10种方式解释]单显示器用户可以使用以下方法在Windows11上调整亮度。这包括使用单个显示器的台式机系统以及笔记本电脑。让我们开始吧。方法1:使用操作中心操作中心是访问

curl和Pythonrequests都是发送HTTP请求的强大工具。虽然curl是一种命令行工具,可让您直接从终端发送请求,但Python的请求库提供了一种更具编程性的方式来从Python代码中发送请求。将curl转换为Pythonrequestscurl命令的基本语法如下所示:curl[OPTIONS]URL将curl命令转换为Python请求时,我们需要将选项和URL转换为Python代码。这是一个示例curlPOST命令:curl-XPOSThttps://example.com/api
