phpstudy nginx下curl请求本地其他项目
curl 请求的时候 如果用post请求,传递参数为 数组的时候 header 头 会被设置为 multipart/form-data 如果是字符串 形式 header 头会被设置为application/x-www-urlencode
在使用数组传值时,php://input是接收不到数据的
今天项目中有个问题出现 ,a网站调用b网站 b网站调用远程c网站。在curl返回值中一直出现 超时现象 ,curl 超时有两种
一个是连接超时时间,另一个是数据传输的最大允许时间。
连接超时时间用 --connect-timeout 参数来指定,数据传输的最大允许时间用
连接超时的话,出错提示形如:
curl: (28) connect() timed out!
数据传输的最大允许时间超时的话,出错提示形如:
curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received
我今天就是出现的第二种错误 原因是 a和b网站都是配置在本地的,我本地是phpstudy 用的是Nginx。
fastcig-pass的设置值(127.0.0.1:9000)。
设置都是以keepalive方式请求,接收到PHP文件时,交于后端过程PHPCGI解析处理(127.0.0.1:9000),等待响应。
而在本地文件以CURL请求本地环境中PHP文件时,之前的PHP还在等待CURL后的结果,这时9000端口已经被占用。导致CURL一直在处于等待状态。设置了超时时间
curl_setop($ch,CURLOPT_TIMEOUT,20),过了超时时间 就返回 curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received
我的解决方案
把b网站的server fastcgi 端口改为了9003
打开cmd
php-cgi.exe -b 127.0.0.1:9003 -c php.ini 运行这个命令 但是cmd 命令窗口不能关闭。
以下摘自网络
上面用cmd命令行窗口是不是很麻烦,还不能关闭窗口,稍微不注意就悲剧了
可以用下面的一个小工具:RunHiddenConsole
首先你需要下载一个小文件RunHiddenConsole 然后复制到nginx目录,新建两个bat批处理文件,start_nginx.bat和stop_nginx.bat
注意:RunHiddenConsole.exe 一定要和两个批处理文件在同一级目录下 ,否则nginx启动不了
具体两个文件怎么写附件里已经写好了,直接下载就可以了
第一步:
将vhost.conf中的一个项目的fastcgi_pass改成9001
1 2 3 | location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9001; } |
cmd运行
1 | D:\Program Files (x86)\php\php-7.0.12-nts>php-cgi.exe -b 127.0.0.1:9001 -c php.ini |
再次测试发送请求
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!