问题已解决:
是因为云主机的问题,需要在本地进行解析,而且不能用公网ip,要用127.0.0.1
非常感谢大佬的指导,解决了这个困扰大半天的困惑,大佬一语道破,解决问题,非常感谢!!!
1、部署在linux服务器上了,并且是两个不同站点的网址请求,并非同一个进程
2、用webman框架,网站部署后可以正常访问 https://push.21c.xin/ ,但是用curl请求网站时总是返回false,
3、同样的代码,更换请求其它网址可以正常返回值,这是服务器的配置问题吗?怎么修改呢,找了很多方案都不行,特请教大佬!
测试网址:https://sso.21c.xin/passport/index/curl?url=https://baidu.com 可以正常返回百度的首页内容
var_dump($tmpInfo); 返回html源码
var_dump(curl_errno($curl)); 返回0
var_dump(curl_getinfo($curl, CURLINFO_HTTP_CODE)); 返回200
curl访问 网址 https://sso.21c.xin/passport/index/curl?url=https://push.21c.xin/ 却返回为false
var_dump($tmpInfo); 返回false
var_dump(curl_errno($curl)); 返回52
var_dump(curl_getinfo($curl, CURLINFO_HTTP_CODE)); 返回0
public function curl( ): Response
{
$curl = new Curl();
$url =request()->get('url','https://sso.21c.xin');
$result = $curl->get($url);
var_dump($result);
return json($result);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
我写的get请求,请求其它网站都可以正常返回,但是请求webman部署的网站不行,都是返回false
https://sso.21c.xin/passport/index/curl1?url=https://baidu.com 用你代码写了这个是正常可以访问的
但是https://sso.21c.xin/passport/index/curl1?url=https://push.21c.xin/ 还是返回false
应该是服务器设置的问题吗
是不是对方的网站请求头需要设置什么的
请求的是我自己的服务器,现在做微服务架构,把模块分离了,不知道服务器要怎么设置才能解决这个问题呢
http_get('https://push.21c.xin/') 我这直接请求你的这个 可以获取到值啊
你怎么写的代码啊
public function curl1( )
{
$url = input('url')?:'https://sso.21c.xin';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
return json($result);
}
刚按照你发的代码也是不可以呢,返回依然是false
$url =request()->get('url','https://sso.21c.xin'); 这杨写呢
,这能访问就怪了
是哪里的问题呢,不能访问
https://push.21c.xin/ 是可以正常访问的啊
curl方式为什么请求总是返回false呢
同样的代码请求其它网址可以正常获取
你要请求的到底是哪个地址?然后你得代码怎么写的,请求的代码粘贴一下瞅瞅就知道了
public function curl1( )
{
$url = input('url')?:'https://push.21c.xin/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
return json($result);
}
请求 https://push.21c.xin/
url可以传参,更改请求的网址
你这段代码你确定 你的$url 是 https://push.21c.xin/ 嘛 ,input获取的是空的吧
你需要打印一下$url 窗口看一下,是否是前端传过来的值,我怀疑你得input()得不到 这个值
input可以获取到的,你可以更换url试一下
https://sso.21c.xin/passport/index/curl1?url=https://baidu.com 这个百度的可以正常
https://sso.21c.xin/passport/index/curl1?url=https://www.workerman.net/ workerman也可以的
你确定嘛?你还是打印一下看看,确定一下
确定,测试过了,可以获取的,并且更换其它url也是可以获取到的
就是不明白,是服务器哪里的设置问题,curl请求获取不到,总是返回false
string(21) "https://push.21c.xin/"
string(11) "curl 参数"
string(21) "https://push.21c.xin/"
string(0) ""
string(3) "Get"
array(0) {
}
string(17) "curl 参数结束"
string(15) "$tmpInfo 信息"
bool(false)
int(52)
int(0)
我试试你得地址哈,我试试能不能访问
提问把系统环境带上啊。如果是windows开发,windows是单进程的,就一个进程不能自己请求自己
我部署在linux服务器上了,并且是两个不同的网址请求,并非同一个进程
php start.php status 截图下
已经发到问题下面了
我这浏览器都没办法访问你的域名,显示超时,telnet也连接超时。
你的服务器估计也无法访问你的域名,在你服务器上
telnet sso.21c.xin 443
试下吧。看看是不是使用了代理 cdn什么的不应该吧,push.21c.xin 和 sso.21c.xin 就解析在这个43.154.4.5服务器上
[root@mail sso.21c.xin]# telnet sso.21c.xin
-bash: telnet: command not found
[root@mail sso.21c.xin]# ping sso.21c.xin
PING hk1.domainagent.pub (43.154.4.5) 56(84) bytes of data.
ping和telnet是不同的协议,一个icmp,一个tcp,ping通不代表tcp能连接,反过来也是。
apt-get install telnet 或者 yum install telnet 装下telnet命令
telnet命令是
telnet sso.21c.xin 443
,端口号加上[root@mail sso.21c.xin]# telnet sso.21c.xin 443
Trying 43.154.4.5...
Connected to sso.21c.xin.
Escape character is '^]'.
没有问题呀我这里
我用的curl访问的,你看看上面的请求方式哪里不对吗
我用的是这个GuzzleHttp\Client ,现在谁还curl 什么年代了???
GuzzleHttp\Exception\ConnectException: cURL error 52: Empty reply from server (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://push.21c.xin/
我用你说的这个类库,报错52,和curl是一样的
你这是电脑问题嘛???
我们都能请求,不知道为啥你请求不了
应该是服务器配置的问题吧
你是不是跨域了???你接口端webman的路由怎么写的??
还有你webman那边是不是 nginx代理的,你得看看你得协议 是不是http1.0 的,你用的是http1.1请求的,导致协议不一致
curl请求不存在跨域问题吧,协议是1.0
location / {
proxy_pass http://127.0.0.1:9901;
index index.php index.html error/index.html;
autoindex off;
proxy_set_header Host $host;
proxy_http_version 1.0;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
1.1 和1.0 都试过了,都是返回false
环境有问题吧?
添加host解析 设置到本地127.0.0.1就可以了