2010-07-09 33 views
11

Tôi đang tìm thư viện hoặc hàm gọi trong python hoặc thư viện liên kết để cho phép tôi nạp dữ liệu văn bản thô đại diện cho một req/res HTTP và sẽ tiết lộ thông tin đó loại biểu mẫu có ý nghĩa như từ điển hoặc danh sách. Tôi không muốn sử dụng một số lớp được xây dựng trong hoặc tạo ra một loạt các đối tượng mới, trong chương trình của tôi tôi nhận được trong một số dữ liệu thô và đó chỉ là những gì tôi đã làm việc với. Đã có một giải pháp cho việc này, hay tôi phải tự viết một trình phân tích cú pháp HTTP?Phân tích cú pháp HTTP thô trong Python

Chỉnh sửa: Hãy để tôi làm rõ chính xác những gì tôi đang tìm kiếm. Tôi đang tìm kiếm thứ gì đó sẽ lấy một chuỗi như sau:

GET /index.html HTTP/1.1 \r\n 
Host:www.stackoverflow.com \r\n 
User-Agent:Firefox \r\n 
etc. 

Và gửi lại cho tôi thứ gì đó đóng gói phương thức, phiên bản HTTP, tiêu đề và mọi thứ còn lại.

+0

- dưới đây là hai câu hỏi mà tôi nghĩ có thể giải quyết vấn đề này (mà tôi đã cố gắng giải quyết chi tiết ở đó): http://stackoverflow.com/questions/2115410/does-python-have-a-module -cho-parsing-http-request-and-response/ http://stackoverflow.com/questions/4685217/parse-raw-http-headers/ –

Trả lời

1

http://docs.python.org/library/httplib.html Tôi tin rằng đây là thư viện bạn đang tìm kiếm. Một chút thay đổi trong tên cho python 3 nhưng nếu không tốt để đi.

+2

Tôi đã xem xét điều đó nhưng không thể tìm thấy những gì tôi cần. Sửa tôi nếu tôi sai, nhưng không phải là lib đó xoay quanh việc thực hiện/nhận yêu cầu? Tôi không muốn thực hiện/nhận bất kỳ yêu cầu nào, tôi chỉ muốn xem dữ liệu thô. Bạn có thể đưa ra một ví dụ về phương pháp mà bạn tin rằng sẽ làm điều này? – themaestro

+1

Vâng yêu cầu http, khi bạn nhận được nó chứa dữ liệu tiêu đề thô, và bạn sử dụng thư viện này để tạo một từ điển đầu trang. Đây là những gì bài viết của bạn mô tả. Nếu bạn đang tìm kiếm để nhận dữ liệu văn bản thô trên một ổ cắm, bạn có thể thử http://docs.python.org/library/socket.html nhưng bạn sẽ tái tạo rất nhiều phần bánh xe. Ngược lại nếu bạn nhận được văn bản thô và muốn có cách phân tích cú pháp nó thành tiêu đề yêu cầu hợp lệ, bạn có thể thử http://deron.meranda.us/python/httpheader/pydoc#-parse_token_or_quoted_string nhưng tôi chưa tự mình thử. – Gabriel

1

Tôi bắt đầu bằng cách xem WebOb. Tôi nghĩ rằng các mô-đun cgi trong thư viện chuẩn cũng có một trình phân tích cú pháp HTTP.

+0

Sweet, webob.Request.accept xử lý điều này một cách hoàn hảo: http://pythonpaste.org/webob/reference.html#accept-headers – aehlke

+0

@Wahnfrieden - Tôi đang bối rối, tuy nhiên, về cách nhận được yêu cầu HTTP thô bên trong một chuỗi, giống như được hiển thị trong câu hỏi, và biến nó thành một đối tượng WebOb. Tôi không thấy bất cứ điều gì trong liên kết của bạn cho thấy rằng nó có thể. Bạn có thể chia sẻ cách bạn chuyển chuỗi yêu cầu HTTP thành các đối tượng WebOb không? (Bởi vì tôi cần vào một trong những dự án của tôi!) :) –

+0

@Brandon xin lỗi tôi đã nhận xét sớm - WebOb phân tích cú pháp phần tiêu đề mà tôi cần (chỉ giá trị của tiêu đề Chấp nhận), nhưng tôi không biết phần còn lại của nó. – aehlke

3

Có một trình phân tích cú pháp HTTP python thuần túy được vận chuyển dưới dạng triển khai dự phòng cho C/Cython tối ưu hóa việc triển khai dự án http-parser.

Dưới đây là phiên bản python tinh khiết:

Đây là nguồn gốc của phiên bản C và Cython wrapper:

Các vấn đề liên quan