• 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

    location ~ .php(.*)$ {
                fastcgi_pass   127.0.0.1:9001;
    }
    

      

    cmd运行

    D:Program Files (x86)phpphp-7.0.12-nts>php-cgi.exe -b 127.0.0.1:9001 -c php.ini
    

    再次测试发送请求

  • 相关阅读:
    守护线程Daemon的理解
    Activity并行网关和排他网关
    Activity快速入门理解
    java虚拟机内存区域理解
    Maven的使用
    Mybatis拦截器(插件实现原理)
    網絡上好的博客收集
    jdbc 设置连接支持多条sql
    python 多环境安装
    Linux 系统命令
  • 原文地址:https://www.cnblogs.com/cxscode/p/7868132.html
Copyright © 2020-2023  润新知