Tôi đã cố gắng sử dụng cURL trong PHP, nhưng bằng cách nào đó, mã HTTP trả về 0 thay vì bất kỳ mã phản hồi hợp lệ nào, chẳng hạn như 200, 500 hoặc 403
Đây là mã tôi đang sử dụng
$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; $r = curl_exec[$ch]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }
Một số bạn có thể nhận thấy, lỗi nằm ở dòng 11 –
$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $r = curl_exec[$ch]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }5
Dòng đó sẽ được gọi sau khi thực hiện cURL
Dung dịch
Giải pháp khá rõ ràng. Tôi cần gọi cho
$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $r = curl_exec[$ch]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }6 sau
$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $r = curl_exec[$ch]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }7
$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $r = curl_exec[$ch]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }
Vấn đề được giải quyết
$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $r = curl_exec[$ch]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }8
$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $r = curl_exec[$ch]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }9
'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
0 'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
1 'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
2 'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
3 'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
4 'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
5 'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
6 'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
7 'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
8 'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
901 TLS の Secure Remote Password [SRP] 認証は、 ローカルとリモートの双方が共通のシークレットを持っている場合に、 お互いを認証する方法を提供します。 TLS-SRP を使うためには、
25 と 23 オプションも設定する必要があります。PHP cURL là thư viện cho phép máy khách truy cập máy chủ từ xa thông qua URL. Nó gửi các yêu cầu HTTP đến điểm cuối từ một ứng dụng hoặc thành phần khác
Nó cho phép các lượt truy cập liên ứng dụng nhận được phản hồi qua mạng. Cơ chế này rất hữu ích để làm việc với các dịch vụ PHP RESTful, tương tác API, v.v.
Có nhiều trường hợp sử dụng trong đó bài đăng cURL PHP hoàn toàn phù hợp. Ví dụ,
- Trích xuất nội dung từ một trang web
- Chuẩn bị nguồn cấp dữ liệu từ các nguồn bên ngoài
- Các phương thức truy cập trực tiếp của API không có SDK
Ví dụ nhanh này cung cấp mã đơn giản để triển khai bài đăng cURL PHP
ví dụ nhanh
'Jane',
'dateOfBirth' => '1974-8-17'
];
$curlHandle = curl_init['//domain-name/endpoint-path'];
curl_setopt[$curlHandle, CURLOPT_POSTFIELDS, $postParameter];
curl_setopt[$curlHandle, CURLOPT_RETURNTRANSFER, true];
$curlResponse = curl_exec[$curlHandle];
curl_close[$curlHandle];
Ngoài ra, chúng ta sẽ xem thêm các ví dụ về trường hợp sử dụng của PHP cURL post request trong các phần sắp tới
Phần 1 – Khái niệm cơ bản về PHP cURL
Sau đây là các bước để thực hiện chu trình phản hồi yêu cầu cURL cơ bản của PHP
- Khởi tạo phiên cURL
- Đặt tùy chọn cURL
- thực hiện yêu cầu
- Đóng phiên
Làm cách nào để định cấu hình PHP cURL?
PHP chứa thư viện libcurl để tạo môi trường làm việc với cURL. Thư viện này sẽ được bật theo mặc định
Nếu không, hãy thực hiện các bước sau để bật mô-đun cURL PHP trong môi trường của bạn
- Mở tệp cấu hình PHP php. ban đầu
- Kiểm tra sự bắt đầu của 9
- Bỏ dấu chấm phẩy [;] ở đầu dòng trên
- Khởi động lại máy chủ Apache
Đặt yêu cầu POST cURL PHP – Phương pháp thay thế
Có nhiều cách để gửi thông số bài viết PHP cURL
- định dạng JSON
- Chuỗi truy vấn HTTP
- Định dạng mảng POST
định dạng JSON
Chuỗi truy vấn HTTP
PHP cURL POST định dạng mảng
0 có thể có một mảng PHP để truyền tham số cho điểm cuối"value1", "key2"=>"value2"];
?>
Đặt tùy chọn tiêu đề cURL
Để đặt tiêu đề PHP cURL, hằng số CURLOPT_HTTPHEADER được sử dụng. Tiêu đề cURL có thể có thêm thông tin. Các khóa sau đây là một số ví dụ để thêm các tùy chọn tiêu đề PHP cURL
- Mã hóa chấp nhận
- Kiểm soát bộ đệm
- Chủ nhà
- Loại nội dung
- Ngôn ngữ chấp nhận
- Đại lý người dùng
Chương trình này đặt các tùy chọn tiêu đề cURL để đặt loại nội dung. Cũng có các tùy chọn để gửi tiêu đề tùy chỉnh. Đó là gửi các cặp khóa-giá trị không chuẩn. Sử dụng tiền tố X- để gửi các tiêu đề không chuẩn. Ví dụ,
________số 8Hằng số CURLOPT_HEADER được đặt với giá trị boolean true. Đó là để cho phép thông tin tiêu đề được đính kèm với phản hồi trả về
1 và 0 sẽ gửi các giá trị qua bài đăng PHP cURL$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $r = curl_exec[$ch]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }2
PHP cURL POST để tải tệp lên
Cũng có thể tải tệp lên máy chủ thông qua bài đăng PHP cURL. Đoạn mã dưới đây cho biết cách tải tệp hình ảnh lên máy chủ
Nó chuẩn bị đối tượng với dữ liệu tệp. Nó sử dụng hàm PHP curl_file_create[] để chuẩn bị nội dung bài đăng tệp
Bằng cách gửi gói ‘fileParam’ theo cách này, mã điểm cuối có thể truy cập nó qua mảng $_FILES[]
$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $r = curl_exec[$ch]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }3
Đặt mã điểm cuối sau vào máy chủ. Sau đó nhấn điểm cuối thông qua tập lệnh cURL ở trên. Yêu cầu bài đăng cuộn tròn PHP gửi đầu vào tệp đến điểm cuối này. Mã PHP này truy cập tệp đã tải lên từ mảng $_FILES
php-curl-post-file-endpoint. php
$ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, $this->api . '/login']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true]; curl_setopt[$ch, CURLOPT_CUSTOMREQUEST, 'POST']; curl_setopt[$ch, CURLOPT_POSTFIELDS, $data]; curl_setopt[$ch, CURLOPT_HEADER, true]; curl_setopt[$ch, CURLOPT_FOLLOWLOCATION, true]; curl_setopt[$ch, CURLOPT_HTTPHEADER, [ 'Referer: ' . $this->api ]]; $r = curl_exec[$ch]; $httpcode = curl_getinfo[$ch, CURLINFO_HTTP_CODE]; curl_close[$ch]; if [$httpcode != 200] { throw new Exception['API returned HTTP code of ' . $httpcode]; }2
Yêu cầu HTTP GET để lấy một trang web
Trong yêu cầu cURL, phương thức mặc định là GET. Chương trình này gọi máy chủ qua cURL với phương thức yêu cầu GET mặc định
Không giống như PHP cURL POST, nó gửi dữ liệu dưới dạng chuỗi truy vấn. Để truyền tham số cho yêu cầu GET, nó phải được xây dựng như một phần của URL
Nó lấy HTML của trang web được chỉ định làm điểm cuối cURL. Nó in phản hồi và hiển thị HTML của trang web mục tiêu trong trình duyệt