Ổ cắm Python gửi trả lại vận chuyển

Xin chào,

Tôi cần trợ giúp viết mã Java để biểu thị dấu xuống dòng
ở dạng Hex 0D. Tôi đã viết một chương trình bằng Java trên hệ thống Unix
truyền dữ liệu đến máy Stratus qua ổ cắm TCP/IP. Dữ liệu tôi gửi tới
hộp Stratus cần phải có dấu xuống dòng trong đó, mà tôi
được viết bằng Java là "\r", nhưng Stratus . Thay vào đó, nó đang mong đợi một hex 0D.
recognize it. It is expecting a hex 0D instead.

Có ai biết cách viết mã bằng Java để vượt qua hex 0D không?

Cảm ơn trước cho bất kỳ lời khuyên bạn có thể cung cấp

vỗ nhẹ

HTTP là viết tắt của giao thức Hyper Text Transfer. Nó là một giao thức lớp ứng dụng để truyền dữ liệu giữa máy khách và máy chủ bằng trình duyệt. Chúng ta có thể sử dụng socket để triển khai HTTP. Chúng tôi phải giải mã/mã hóa tin nhắn theo thông số kỹ thuật HTTP [RFC2616] chỉ là Văn bản. Trong bài viết này, chúng tôi sẽ triển khai những điều cơ bản của giao thức HTTP

máy chủ HTTP

Chúng tôi sẽ tạo một ổ cắm TCP. Cổng mặc định là 80 cho HTTP. Nhưng chúng tôi sẽ sử dụng 8080 để chạy thử nghiệm

Bạn có thể sử dụng mô-đun yêu cầu để nhận phản hồi từ máy chủ HTTP tùy chỉnh

>>> import requests
>>> data = requests.get["//127.0.0.1:8080"]
>>> data.status_code
200
>>> data.text
'Hello World'
>>> data.headers
{}

Trên máy chủ, bạn có thể thấy

GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive

Lời yêu cầu

Một yêu cầu HTTP bao gồm sau

  1. GET / HTTP/1.1
    Host: 127.0.0.1:8080
    User-Agent: python-requests/2.22.0
    Accept-Encoding: gzip, deflate
    Accept: */*
    Connection: keep-alive
    1. Một dòng xác định loại yêu cầu và đường dẫn
  2. GET / HTTP/1.1
    Host: 127.0.0.1:8080
    User-Agent: python-requests/2.22.0
    Accept-Encoding: gzip, deflate
    Accept: */*
    Connection: keep-alive
    2. Một bộ tiêu đề kiểu RFC-822 tùy chọn
  3. GET / HTTP/1.1
    Host: 127.0.0.1:8080
    User-Agent: python-requests/2.22.0
    Accept-Encoding: gzip, deflate
    Accept: */*
    Connection: keep-alive
    3. Dữ liệu tùy chọn

Dòng yêu cầu

Để khái quát hóa nó, chúng ta có thể nói dòng yêu cầu bao gồm

GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
4

Dòng yêu cầu của yêu cầu trên là.

GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
0

Phương pháp này là

GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
1. có nghĩa là chúng tôi muốn lấy dữ liệu từ máy chủ. Lưu ý rằng phương pháp phân biệt chữ hoa chữ thường. Ở đây đường dẫn đến tài nguyên là
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
2 là phiên bản giao thức HTTP chúng tôi đang sử dụng. Và
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
3 là CRLF. CR-LF có nghĩa là vận chuyển trở lại. Nó có nghĩa là kết thúc dòng

tiêu đề

GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
4là các trường tiêu đề yêu cầu

Dữ liệu

Trong yêu cầu trên, chúng tôi chưa gửi bất kỳ dữ liệu nào. Hãy gửi một yêu cầu khác để hiểu mọi thứ tốt hơn một chút

>>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]

Trong bản in chúng ta có thể thấy

________số 8

Ở đây phương pháp đã được thay đổi để gửi. Chúng tôi có thể thấy rằng url yêu cầu đã được sửa đổi thành

GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
5. Tiêu đề tùy chỉnh của chúng tôi
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
6 và
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
7 đã được thêm vào. Và dữ liệu mà
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
8 và
GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
9 chúng tôi đã gửi cũng có mặt

trình duyệt

Chúng tôi có thể truy cập máy chủ từ trình duyệt. Mở trình duyệt của bạn và gõ

>>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
0

Trong thiết bị đầu cuối, bạn sẽ thấy kết quả sau

GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
5

máy khách HTTP

Chúng tôi có thể triển khai ứng dụng khách HTTP của riêng mình bằng cách sử dụng cùng một nguyên tắc. Nó là một chương trình ổ cắm đơn giản

Đoạn mã trên sẽ in

GET / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
6
  • >>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
    1 là giao thức chúng tôi đang sử dụng
  • >>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
    2 là mã trạng thái có nghĩa là yêu cầu đã thành công. Mã trạng thái có ba chữ số
  • >>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
    3 Đó là một giai đoạn một dòng đơn giản cho biết lý do
  • >>requests.post[url=”//127.0.0.1:8080?a=1", headers= {“header1”: “value1”, “header2”: “value2”},data={“key1”: “value1”, “key2”: “value2”}]
    4 là nội dung của thư. Đó là phần được sửa đổi

Phản ứng

phản hồi có

  1. Một dòng đưa ra mã phản hồi
  2. Một bộ tiêu đề kiểu RFC-822 tùy chọn
  3. Dữ liệu tùy chọn

Phần kết luận

Đây là xương trần đơn giản. Để biết thêm thông tin, tôi thấy mã nguồn C python hữu ích. https. //github. com/python/cpython/blob/main/Lib/http/client. py

Chủ Đề