Heim > Backend-Entwicklung > PHP-Tutorial > 怎么调用外网接口

怎么调用外网接口

WBOY
Freigeben: 2016-06-06 20:19:47
Original
1861 Leute haben es durchsucht

现在想调用同程旅游的机票数据,该如何调用?

接口文档发给我没看懂,本人是做前端的,php不太了解

回复内容:

现在想调用同程旅游的机票数据,该如何调用?

接口文档发给我没看懂,本人是做前端的,php不太了解

后台处理的话curl 或者 fsockopen发http请求,前端处理的花就如 @baofan 所说ajax请求。

贴个代码

<code> protected function post($url, $post_data = '', $trade_type='APP', $certificate = false, $timeout = 30){
        $ch = curl_init();
        //设置超时
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

        //如果有配置代理这里就设置代理
        if($this->config['CURL_PROXY_HOST'] != "0.0.0.0"
            && $this->config['CURL_PROXY_PORT'] != 0){
            curl_setopt($ch,CURLOPT_PROXY, $this->config['CURL_PROXY_HOST']);
            curl_setopt($ch,CURLOPT_PROXYPORT, $this->config['CURL_PROXY_PORT']);
        }
        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
        //设置header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch,CURLOPT_CAINFO, $this->config['ssl_public_path']);
        
        if($certificate == true){
            //设置证书
            //使用证书:cert 与 key 分别属于两个.pem文件
            if (strtoupper($trade_type) == "APP"){
                curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
                curl_setopt($ch,CURLOPT_SSLCERT, $this->config['open']['ssl_cert_path']);
                curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
                curl_setopt($ch,CURLOPT_SSLKEY, $this->config['open']['ssl_key_path']);
            }else{
                curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
                curl_setopt($ch,CURLOPT_SSLCERT, $this->config['mp']['ssl_cert_path']);
                curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
                curl_setopt($ch,CURLOPT_SSLKEY, $this->config['mp']['ssl_key_path']);
            }
        }
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        //运行curl
        $data = curl_exec($ch);
        //返回结果
        if($data){

            curl_close($ch);
            return $data;
        } else {
            curl_close($ch);
            return "xxx";
        }
    }</code>
Nach dem Login kopieren

再贴个fsockopen的,这个是为了异步的,所以没接收数据.

<code>public function async_post($host,$path,$data){

        $post = http_build_query($data);
        $len = strlen($post);
        $fp = @fsockopen( $host , 80, $errno, $errstr, 5);
        if (!$fp) {
            return false;
        } else {

            $out = "POST $path HTTP/1.1\r\n";
            $out .= "Host: $host\r\n";
            $out .= "Content-type: application/x-www-form-urlencoded\r\n";
            $out .= "Connection: Close\r\n";
            $out .= "Content-Length: $len\r\n";
            $out .= "\r\n";
            $out .= $post."\r\n";
            fwrite($fp, $out);
            fclose($fp);
            return true;
        }
    }</code>
Nach dem Login kopieren

发http请求呗,js不是有ajax嘛

ajax有跨域可以用jsonp
PHP有CURL

认为这种机票数据最好应该在后台处理,前台和后台确定好格式后,对前端就只是一个展示。原因是若第三方的接口url 发生改变或者通信格式发生改变,只需要更改后台和第三方交互的部分,对前端毫无感知,这样无论从开发还是升级都是更方便的

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage