为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我在cURL上没有得到任何回应?

为什么我在cURL上没有得到任何回应?

PHP
撒科打诨 2022-09-12 10:15:01
没有类,只是普通的代码,我的方法正在工作,response_status获得“成功”,但是当我把它放在一个类中时,我什么也得不到。所有代码:class THBS_API{    private const call_url = "https://xxxxxxxxxxxx.xxx/endsoftware.php";    private $base_url;    private $fields;    private $fields_string;    public static function getUsers()    {        $base_url = $_SERVER['SERVER_NAME'];        $fields_string = '';        $fields = array(        'API_USER' => urlencode('xxxxxx@xxxxxx.xxx'),        'API_PASS' => urlencode('xxxxxxxxx'),        'CMD' => urlencode('getUserCount'),        'FROM' => urlencode($base_url));        //url-ify the data for the POST        foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }        rtrim($fields_string, '&');        //open connection        $ch = curl_init();        //set the url, number of POST vars, POST data        curl_setopt($ch,CURLOPT_URL, $call_url);        curl_setopt($ch,CURLOPT_POST, count($fields));        curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        //execute post        $result = curl_exec($ch);        //close connection        curl_close($ch);        $response = json_decode($result, true);        return $response['response_status'];    }}echo THBS_API::getUsers();很奇怪,但我认为是因为声明变量在类中是不同的,是我使用的问题吗?以及如何解决这个问题?privar $base_urlP.S:这是我的第一堂课,我用普通函数工作得很好,但我仍然想学习类函数现在我得到注意:未定义的变量:fields_string在第 24 行.php /srv/disk1/3203065/.com/三十三十三.php第 44 行:return $response['response_status'];
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

对代码进行了一些更改。

  • 由于 将始终是常量,因此您可以在类中将其声明为常量。call_url

  • 其次,您正在将值逐个连接,这是不需要的。您可以使用http_build_query函数来实现此目的。$field&

  • 第三个是你有这是不正确的,因为这说只有当我们有超过0个字段时才发出POST请求。无论是否如此,您都希望提出适当的请求。因此,请将其设置为始终。curl_setopt($ch,CURLOPT_POST, count($fields));true

片段:


查看完整回答
反对 回复 2022-09-12
?
森林海

TA贡献2011条经验 获得超2个赞

<?php


namespace THBS_API;


class THBS_API{

    private const call_url = "https://xxxxxxxxxxx.com/API/endsoftware.php";


    public static function getUsers(){

        $base_url = $_SERVER['SERVER_NAME'];

        $fields = array(

            'API_USER' => urlencode('xxxxxx@xxxxxx.xxx'),

            'API_PASS' => urlencode('xxxxxxxxx'),

            'CMD' => urlencode('getUserCount'),

            'FROM' => urlencode($base_url)

        );


        //open connection

        $ch = curl_init();


        //set the url, number of POST vars, POST data

        curl_setopt($ch,CURLOPT_URL, self::call_url);

        curl_setopt($ch,CURLOPT_POST, true);

        curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));

        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); // add certificates once you have them(recommended)

        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);


        //execute post

        $result = curl_exec($ch);


        //close connection

        curl_close($ch);


        $response = json_decode($result, true);

        return $response['response_status'];

    }

}



echo THBS_API::getUsers();

更新:


正如评论中提到的@Dharman,您应该始终向cURL请求添加证书,以避免中间人攻击,此答案显示了如何在cURL请求中添加一个证书。


此外,您可以简单地使用而不是单独编码每个,就像无论如何都会这样做一样。因此,请从上面的代码中删除。http_build_queryhttp_build_queryurlencode


查看完整回答
反对 回复 2022-09-12
  • 2 回答
  • 0 关注
  • 439 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号