cuốn sách gpt4 ai đã làm

php - Làm cách nào để buộc CURL yêu cầu http/1.1? Hoặc có thể còn vấn đề khác chưa rõ

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 06:04:44 27 4
mua khóa gpt4 Nike

Tôi có một đoạn mã (hãy gọi nó là Mã A) chạy trong một khung và tôi muốn nó chạy trong một khung khác. Mã hoạt động sử dụng CURL để thực hiện yêu cầu POST thành công như hiển thị bên dưới (yêu cầu bật CURLOPT_VERBOSE):

* Đã kết nối với android.clients.google.com (216.58.209.238) cổng 443 (#0)
* ALPN, cung cấp http/1.1
* Lựa chọn mật mã: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* thiết lập thành công vị trí xác minh chứng chỉ:
* Tệp CA: /Applications/MAMP/Library/OpenSSL/cert.pem
CApath: không có
* Kết nối SSL sử dụng TLSv1.2/ECDHE-ECDSA-AES128-GCM-SHA256
* ALPN, máy chủ được chấp nhận sử dụng http/1.1
* Chứng chỉ máy chủ:
* chủ đề: C=US; ST=California; L=Mountain View;
* ngày bắt đầu: 18 tháng 1 19:17:59 2017 GMT
* Ngày hết hạn: 12 tháng 4 18:51:00 2017 GMT
* chủ đềAltName: máy chủ "android.clients.google.com" khớp với "android.clients.google.com" của chứng chỉ
* nhà phát hành: C=US; O=Google Inc=Google Internet Authority G2;
* Xác minh chứng chỉ SSL ok.
> ĐĂNG /xác thực HTTP/1.1
Máy chủ: android.clients.google.com
Chấp nhận: */*
Loại nội dung: application/x-www-form-urlencoded; bộ ký tự=UTF-8
Độ dài nội dung: 97

Khung http ở đây (cụ thể là yii2/httpclient) có quá nhiều phụ thuộc để mang nó sang dự án khác, vì vậy tôi đang cố gắng tạo lại nó ở mức độ thấp (hãy gọi nó là mã B):

$ch = curl_init();
Curl_setopt($ch, CURLOPT_POST, 1);
Curl_setopt($ch, CURLOPT_POSTFIELDS, 'post-data-here');
Curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
Curl_setopt($ch, CURLOPT_URL, 'https://android.clients.google.com/auth');
Curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/x-www-form-urlencoded; charset=UTF-8"] // chỉ vì tôi quá tuyệt vọng
Curl_setopt($ch, CURLOPT_VERBOSE, true);
$content = Curl_exec($ch);

Tôi đã hy vọng kết quả tương tự, nhưng đây là những gì tôi nhận được:

* Đã kết nối với android.clients.google.com (216.58.209.238) cổng 443 (#0)
* Kết nối TLS 1.2 sử dụng TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
* Chứng chỉ máy chủ: *.google.com
* Chứng chỉ máy chủ: Google Internet Authority G2
* Chứng chỉ máy chủ: GeoTrust Global CA
> ĐĂNG /xác thực HTTP/1.1
Máy chủ: android.clients.google.com
Chấp nhận: */*
Loại nội dung: application/x-www-form-urlencoded; bộ ký tự=UTF-8
Độ dài nội dung: 97
* quá trình tải lên bị hủy hoàn toàn: 97 trên 97 byte
< HTTP/1.1 200 Được
< Loại nội dung: văn bản/bộ ký tự thuần túy=utf-8
< Kiểm soát bộ đệm: không có bộ đệm, không lưu trữ, tuổi tối đa = 0, phải xác nhận lại
< Pragma: không có bộ đệm
< Hết hạn: Thứ Hai, ngày 01 tháng 1 năm 1990 00:00:00 GMT
< Ngày: Thứ Sáu, ngày 27 tháng 1 năm 2017 12:07:12 GMT
< X-Content-Type-Options: nosniff
< Tùy chọn khung X: SAMEORIGIN
< X-XSS-Bảo vệ: 1 chế độ=chặn
< Máy chủ: GSE
< Alt-Svc: xóa

< Khác nhau: Chấp nhận-Mã hóa
< Mã hóa chuyển giao: chunked

<đầu>
Phiên bản HTTP không được hỗ trợ


Phiên bản HTTP không được hỗ trợ


Lỗi 505


Xem sitemap của VNExpress

Thay vì phản hồi hợp lệ, tôi nhận được "Lỗi 505: Phiên bản HTTP không được hỗ trợ". Sự khác biệt duy nhất tôi thấy là mã đang hoạt động thử "ALPN, phục vụ http/1.1" trong khi mã sau thì không. Sau đó là phần chứng chỉ, nhưng nó chưa bao giờ được đề cập trong Mã A, vì vậy tôi không chắc việc cung cấp nó có tác dụng gì.

Cả hai phiên bản mã đều chạy trên cùng một máy chủ, cùng phiên bản PHP (5.6) và CURL (7.51.0). Sự khác biệt trong nhật ký dài dòng bắt đầu trước khi bất kỳ dữ liệu nào được gửi, vì vậy tôi đoán nó không liên quan gì đến bất kỳ dữ liệu nào hoặc tiêu đề được đặt không chính xác.

Những gì tôi đã thử cho đến nay (ít hoặc không có tác dụng):

  1. Curl_setopt($ch, CURLOPT_SSL_ENABLE_ALPN, sao cũng được) - không hoạt động vì CURLOPT_SSL_ENABLE_ALPN hoàn toàn không được xác định (mặc dù nó phải có trong phiên bản CURL này, không chắc có gì sai)
  2. Curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, sao cũng được)
  3. Curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, sao cũng được)
  4. Curl_setopt($ch, CURLOPT_SSLVERSION, sao cũng được)
  5. Một số thứ ngu ngốc vô vọng khác mà tôi thậm chí còn xấu hổ khi trình bày ở đây

Tôi đã cố gắng đào sâu vào mã hoạt động nhất có thể, nhưng dường như nó không làm được gì với một HTTP POST đơn giản. Tôi đã theo dõi mọi lọn tóc xoăn mà nó tạo ra và có vẻ như đây là những lọn tóc xoăn duy nhất tôi đang sử dụng trong mã của mình, không có gì thêm. Tuy nhiên, nó vẫn hoạt động nhưng mã của tôi thì không.

Tôi đã thử làm điều tương tự bằng dòng lệnh:

$ cuộn tròn https://android.clients.google.com/auth -v --http1.1 -X POST --no-alpn --no-npn --data "copypasted-post-data-from-code-B -và-vâng-nó-urlencoded"

Nhận kết quả đúng:

* Đang thử 216.58.209.238...
*TCP_NODELAY được đặt
* Đã kết nối với android.clients.google.com (216.58.209.238) cổng 443 (#0)
* Lựa chọn mật mã: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* thiết lập thành công vị trí xác minh chứng chỉ:
* Tệp CA: /Applications/MAMP/Library/OpenSSL/cert.pem
CApath: không có
...
> ĐĂNG /xác thực HTTP/1.1
> Máy chủ: android.clients.google.com
> Tác nhân người dùng: Curl/7.51.0
> Chấp nhận: */*
> Độ dài nội dung: 97
> Loại nội dung: application/x-www-form-urlencoded
>
* quá trình tải lên bị hủy hoàn toàn: 97 trên 97 byte
< HTTP/1.1 200 Được
< Loại nội dung: văn bản/bộ ký tự thuần túy=utf-8
< Kiểm soát bộ đệm: không có bộ đệm, không lưu trữ, tuổi tối đa = 0, phải xác nhận lại
< Pragma: không có bộ đệm
< Hết hạn: Thứ Hai, ngày 01 tháng 1 năm 1990 00:00:00 GMT
< Ngày: Thứ Sáu, ngày 27 tháng 1 năm 2017 13:22:27 GMT
< X-Content-Type-Options: nosniff
< Tùy chọn khung X: SAMEORIGIN
< X-XSS-Bảo vệ: 1 chế độ=chặn
< Máy chủ: GSE
< Alt-Svc: xóa

< Khác nhau: Chấp nhận-Mã hóa
< Mã hóa chuyển giao: chunked
<
SID=BAD_COOKIE
LSID=BAD_COOKIE
Auth=here-s-the-data-i-need

câu trả lời hay nhất

Lỗi 505: Phiên bản HTTP không được hỗ trợ Không phải chuỗi lỗi được trả về bởi Curl/libcurl, điều này giống như những gì bạn đang nhận được từ máy chủnội dunggiao tiếp. Nếu bạn cho chúng tôi xem phản hồi HTTP đầy đủ bao gồm cả tiêu đề thì chúng tôi có thể đã thấy nó.

Vì vậy, bạn chẳng thu được gì khi thử các tùy chọn uốn cong khác nhau vì uốn cong luôn hoạt động tốt. Bạn cũng có thể xác minh điều này bằng cách sử dụng công cụ dòng lệnh Curl đối với máy chủ mà bạn đang cố gắng bắt đầu làm việc:

cuộn tròn https://android.clients.google.com/auth -v --http1.1 -X POST --no-alpn --no-npn

Dòng lệnh này cho thấy cả hai "lớp" TLS và HTTP đều ổn.

một câu hỏi khácđâyGặp lỗi tương tự khi họ truyền sai dữ liệu (không được mã hóa url). Có thể bạn có thứ gì đó tương tự nhưng đã bỏ lỡ do chuyển sang framework mới?

Giới thiệu về php - Làm cách nào để buộc CURL yêu cầu http/1.1? Hoặc có thể còn có những câu hỏi khác, không chắc lắm, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/41894411/

27 4 0
Taklimakan
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress