[] PHP CURL function (supports get, post, xml, file uploads)

CURL functions

curl analog form submission, under the record here, that is used to facilitate future use

1, support get, post, xml, file uploads ...

/**
 * 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, generally do not have special needs use the following on the line

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;
}
Published 41 original articles · won praise 21 · views 70000 +

Guess you like

Origin blog.csdn.net/u010324331/article/details/86645339