【PHP】CURL函数(支持get,post,xml,文件上传)

CURL函数

curl 模拟表单提交,此处记录下,方便以后拿来即用

1、支持get,post,xml,文件上传等…

/**
 * curl
 * @param      $url
 * @param null $data
 * @param null $BOUNDARY
 * @return mixed
 * @throws \Exception
 * @author   liuml  <[email protected]>
 * @DateTime 2018/12/21  15:52
 */
public function curl($url, $data = NULL, $format = 'XML', $timeOut = 30)
{
    $ch = curl_init();  // 初始一个curl会话
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_URL, $url);    // 设置url

    switch ($format) {
        case 'XML':
            $headers = [
                "Content-Type:text/xml; charset=utf-8",
            ];
            break;
        case 'FileUp':
            $headers = [
                "content-type:multipart/form-data",
            ];
            break;
        default:
            $headers = [
                "Content-Type:application/x-www-form-urlencoded; charset=utf-8",
            ];
            break;
    }

    if ($headers) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }

    if (substr($url, 0, 5) == 'https') {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }
    if (!empty($data)) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeOut); // PHP脚本在成功连接服务器前等待多久,单位秒
    curl_setopt($ch, CURLOPT_HEADER, false);
    $reponse = curl_exec($ch);   // 抓取URL并把它传递给浏览器// 是否报错
    if (curl_errno($ch) > 0) {
        throw new \Exception($this->curlErrnoContrast(curl_errno($ch)), 0);
    } else {
        $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if (200 !== $httpStatusCode) {
            throw new \Exception($reponse, $httpStatusCode);
        }
    }
    // curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    // $request_header = curl_getinfo($ch);
    curl_close($ch);
    return $reponse;
}

/**
 * curlErrnoContrast
 * @param $code
 * @return mixed
 * @author   liuml  <[email protected]>
 * @DateTime 2019/1/24  10:20
 */
public function curlErrnoContrast($code)
{
    $error_codes = [
        '1'  => 'CURLE_UNSUPPORTED_PROTOCOL',
        '2'  => 'CURLE_FAILED_INIT',
        '3'  => 'CURLE_URL_MALFORMAT',
        '4'  => 'CURLE_URL_MALFORMAT_USER',
        '5'  => 'CURLE_COULDNT_RESOLVE_PROXY',
        '6'  => 'CURLE_COULDNT_RESOLVE_HOST',
        '7'  => 'CURLE_COULDNT_CONNECT',
        '8'  => 'CURLE_FTP_WEIRD_SERVER_REPLY',
        '9'  => 'CURLE_REMOTE_ACCESS_DENIED',
        '11' => 'CURLE_FTP_WEIRD_PASS_REPLY',
        '13' => 'CURLE_FTP_WEIRD_PASV_REPLY',
        '14' => 'CURLE_FTP_WEIRD_227_FORMAT',
        '15' => 'CURLE_FTP_CANT_GET_HOST',
        '17' => 'CURLE_FTP_COULDNT_SET_TYPE',
        '18' => 'CURLE_PARTIAL_FILE',
        '19' => 'CURLE_FTP_COULDNT_RETR_FILE',
        '21' => 'CURLE_QUOTE_ERROR',
        '22' => 'CURLE_HTTP_RETURNED_ERROR',
        '23' => 'CURLE_WRITE_ERROR',
        '25' => 'CURLE_UPLOAD_FAILED',
        '26' => 'CURLE_READ_ERROR',
        '27' => 'CURLE_OUT_OF_MEMORY',
        '28' => 'CURLE_OPERATION_TIMEDOUT',
        '30' => 'CURLE_FTP_PORT_FAILED',
        '31' => 'CURLE_FTP_COULDNT_USE_REST',
        '33' => 'CURLE_RANGE_ERROR',
        '34' => 'CURLE_HTTP_POST_ERROR',
        '35' => 'CURLE_SSL_CONNECT_ERROR',
        '36' => 'CURLE_BAD_DOWNLOAD_RESUME',
        '37' => 'CURLE_FILE_COULDNT_READ_FILE',
        '38' => 'CURLE_LDAP_CANNOT_BIND',
        '39' => 'CURLE_LDAP_SEARCH_FAILED',
        '41' => 'CURLE_FUNCTION_NOT_FOUND',
        '42' => 'CURLE_ABORTED_BY_CALLBACK',
        '43' => 'CURLE_BAD_FUNCTION_ARGUMENT',
        '45' => 'CURLE_INTERFACE_FAILED',
        '47' => 'CURLE_TOO_MANY_REDIRECTS',
        '48' => 'CURLE_UNKNOWN_TELNET_OPTION',
        '49' => 'CURLE_TELNET_OPTION_SYNTAX',
        '51' => 'CURLE_PEER_FAILED_VERIFICATION',
        '52' => 'CURLE_GOT_NOTHING',
        '53' => 'CURLE_SSL_ENGINE_NOTFOUND',
        '54' => 'CURLE_SSL_ENGINE_SETFAILED',
        '55' => 'CURLE_SEND_ERROR',
        '56' => 'CURLE_RECV_ERROR',
        '58' => 'CURLE_SSL_CERTPROBLEM',
        '59' => 'CURLE_SSL_CIPHER',
        '60' => 'CURLE_SSL_CACERT',
        '61' => 'CURLE_BAD_CONTENT_ENCODING',
        '62' => 'CURLE_LDAP_INVALID_URL',
        '63' => 'CURLE_FILESIZE_EXCEEDED',
        '64' => 'CURLE_USE_SSL_FAILED',
        '65' => 'CURLE_SEND_FAIL_REWIND',
        '66' => 'CURLE_SSL_ENGINE_INITFAILED',
        '67' => 'CURLE_LOGIN_DENIED',
        '68' => 'CURLE_TFTP_NOTFOUND',
        '69' => 'CURLE_TFTP_PERM',
        '70' => 'CURLE_REMOTE_DISK_FULL',
        '71' => 'CURLE_TFTP_ILLEGAL',
        '72' => 'CURLE_TFTP_UNKNOWNID',
        '73' => 'CURLE_REMOTE_FILE_EXISTS',
        '74' => 'CURLE_TFTP_NOSUCHUSER',
        '75' => 'CURLE_CONV_FAILED',
        '76' => 'CURLE_CONV_REQD',
        '77' => 'CURLE_SSL_CACERT_BADFILE',
        '78' => 'CURLE_REMOTE_FILE_NOT_FOUND',
        '79' => 'CURLE_SSH',
        '80' => 'CURLE_SSL_SHUTDOWN_FAILED',
        '81' => 'CURLE_AGAIN',
        '82' => 'CURLE_SSL_CRL_BADFILE',
        '83' => 'CURLE_SSL_ISSUER_ERROR',
        '84' => 'CURLE_FTP_PRET_FAILED',
        '85' => 'CURLE_RTSP_CSEQ_ERROR',
        '86' => 'CURLE_RTSP_SESSION_ERROR',
        '87' => 'CURLE_FTP_BAD_FILE_LIST',
        '88' => 'CURLE_CHUNK_FAILED',
    ];
    return $error_codes[$code] ?? '';
}

2、一般没有特殊需求用下面这个就行了

public function https_request($url, $data = null)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    if(substr($url,0,5) == 'https'){
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在
    }
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
发布了41 篇原创文章 · 获赞 21 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/u010324331/article/details/86645339
今日推荐