Hướng dẫn python requests post size limit - python yêu cầu giới hạn kích thước bài đăng

17

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Máy chủ của tôi thực hiện các yêu cầu bên ngoài và tôi muốn hạn chế thiệt hại mà một yêu cầu không thể thực hiện được. Tôi đang tìm cách hủy bỏ yêu cầu trong những tình huống này:

  • Tổng thời gian của yêu cầu vượt quá một giới hạn nhất định (ngay cả khi dữ liệu vẫn đến)
  • Tổng kích thước nhận được vượt quá giới hạn (tôi cần hủy trước khi chấp nhận thêm dữ liệu)
  • Tốc độ truyền giảm xuống dưới một số cấp độ (mặc dù tôi có thể sống mà không có mức này nếu có thể cung cấp tổng thời gian giới hạn)

Lưu ý rằng tôi không tìm kiếm tham số timeout trong các yêu cầu, vì đây chỉ là thời gian chờ không hoạt động. Tôi không thể tìm thấy bất cứ điều gì để làm với tổng thời gian chờ hoặc một cách để hạn chế tổng kích thước. Một ví dụ cho thấy tham số maxsize trên HTTPAdapter nhưng điều đó không được ghi lại.

Làm thế nào tôi có thể đạt được các yêu cầu này bằng cách sử dụng requests?

Đã hỏi ngày 12 tháng 3 năm 2014 lúc 8:45Mar 12, 2014 at 8:45

Hướng dẫn python requests post size limit - python yêu cầu giới hạn kích thước bài đăng

eda-qa mort-ora-yeda-qa mort-or-yedA-qa mort-ora-y

29K38 Huy hiệu vàng132 Huy hiệu bạc252 Huy hiệu Đồng38 gold badges132 silver badges252 bronze badges

4

Bạn có thể thử cài đặt stream=True, sau đó hủy bỏ yêu cầu khi vượt quá giới hạn thời gian hoặc kích thước của bạn trong khi bạn đọc dữ liệu trong các đoạn.

Kể từ bản phát hành requests 2.3.0, thời gian chờ cũng áp dụng cho các yêu cầu phát trực tuyến, vì vậy tất cả những gì bạn cần làm là cho phép hết thời gian chờ cho kết nối ban đầu và từng bước lặp:

r = requests.get(..., stream=True, timeout=initial_timeout)
r.raise_for_status()

if int(r.headers.get('Content-Length')) > your_maximum:
    raise ValueError('response too large')

size = 0
start = time.time()

for chunk in r.iter_content(1024):
    if time.time() - start > receive_timeout:
        raise ValueError('timeout reached')

    size += len(chunk)
    if size > your_maximum:
        raise ValueError('response too large')

    # do something with chunk

Điều chỉnh thời gian chờ khi cần thiết.

Đối với các bản phát hành requests <2.3.0 (bao gồm thay đổi này), bạn không thể hết thời gian sản lượng

import requests

response = requests.get(your_url, stream=True, timeout=10)
response_content = [] #contains partial or full page_source 

for chunk in response.iter_content(1024):
    if len(chunk)>10000: # you can decide your chunk size limit(page_size)
       response_content.append(chunk)
       response.close()
       break
     else:
         response_content.append(chunk) # has full page source
         break
               

2; Một máy chủ ngừng phản hồi ở giữa một khối vẫn sẽ buộc kết nối. Bạn sẽ phải bọc mã trên trong một hàm hết thời gian chờ để cắt bỏ các phản hồi dài hạn sớm.

Hướng dẫn python requests post size limit - python yêu cầu giới hạn kích thước bài đăng

Đã trả lời ngày 12 tháng 3 năm 2014 lúc 9:46Mar 12, 2014 at 9:46

Martijn Pieters ♦ Martijn PietersMartijn Pieters

990K276 Huy hiệu vàng3898 Huy hiệu bạc3249 Huy hiệu đồng276 gold badges3898 silver badges3249 bronze badges

4

Nó hoạt động cho tôi

import requests

response = requests.get(your_url, stream=True, timeout=10)
response_content = [] #contains partial or full page_source 

for chunk in response.iter_content(1024):
    if len(chunk)>10000: # you can decide your chunk size limit(page_size)
       response_content.append(chunk)
       response.close()
       break
     else:
         response_content.append(chunk) # has full page source
         break
               

Đã trả lời ngày 7 tháng 4 năm 2021 lúc 13:06Apr 7, 2021 at 13:06

Hướng dẫn python requests post size limit - python yêu cầu giới hạn kích thước bài đăng

Yêu cầu Python là một thư viện tuyệt vời để thực hiện các yêu cầu HTTP. Nó tự động xử lý nén và chuyển hướng. Thư viện này cũng có một luồng tùy chọn mạnh mẽ, cực kỳ hữu ích để làm việc với các tệp lớn. Một tệp nén lớn có thể được phát trực tuyến, được giải nén khi bay, xử lý và tái tạo cùng một lúc, mà không tải xuống toàn bộ tệp.

Sau đây là đoạn mã, được lấy từ StackOverflow, biểu thị cách chúng ta có thể sử dụng giới hạn kích thước và thời gian chờ với thư viện yêu cầu.

r = requests.get(..., stream=True, timeout=initial_timeout)
r.raise_for_status()

if int(r.headers.get('Content-Length')) > your_maximum:
    raise ValueError('response too large')

size = 0
start = time.time()

for chunk in r.iter_content(1024):
    if time.time() - start > receive_timeout:
        raise ValueError('timeout reached')

    size += len(chunk)
    if size > your_maximum:
        raise ValueError('response too large')

    # do something with chunk

Howerver, có một nhược điểm của phương pháp này, nội dung won được giải mã theo mặc định. Kiểm tra các ý kiến ​​về câu trả lời cụ thể này.

Do đó, nếu chúng ta muốn giới hạn, kích thước phản hồi và chúng ta có thể đi theo cách tiếp cận này.

import requests
r = requests.get('https://github.com/timeline.json', timeout=5, stream=True)

content = r.raw.read(100000+1, decode_content=True)
if len(content) > 100000:
    raise ValueError('Too large a response')
print content
print json.loads(content)

Với cách tiếp cận này, chúng ta có thể giới hạn, kích thước phản hồi. Tuy nhiên, trước khi cố gắng nhận được phản hồi, chúng tôi có thể kiểm tra các tiêu đề trước tiên, ví dụ:

    if 'html' not in r.headers.get('Content-Type'):
        raise ValueError('Not Html Document')

Theo cách này, thay vì tạo yêu cầu đầu trước, sau đó thực hiện yêu cầu nhận, chúng tôi có thể thực hiện một yêu cầu nhận và kiểm tra các tiêu đề trước, sau đó nhận nội dung nếu đáp ứng các yêu cầu của chúng tôi.

Bạn có thể gửi bao nhiêu dữ liệu trong yêu cầu POST?

Giá trị mặc định của đầu nối HTTP và HTTPS Kích thước bài đăng tối đa là 2MB. Tuy nhiên, bạn có thể điều chỉnh giá trị theo yêu cầu của bạn. Lệnh dưới đây để đặt đầu nối để chấp nhận tối đa 100.000 byte. Nếu kích thước bài đăng yêu cầu HTTP vượt quá 100.000 byte thì đầu nối trả về HTTP/1.1 400 Yêu cầu xấu.. However you can adjust the value as per your requirement. The below command to set the connector to accept maximum 100,000 bytes. If the http request POST size exceeds the 100,000 bytes then connector return HTTP/1.1 400 Bad Request.

Giới hạn trên cho tải trọng để vượt qua trong phương thức POST là gì?

Bản thân phương thức POST không có bất kỳ giới hạn nào về kích thước của dữ liệu.does not have any limit on the size of data.

Làm thế nào để bạn vượt qua một cơ thể trong một yêu cầu bài viết trong Python?

Bạn sẽ muốn điều chỉnh dữ liệu bạn gửi trong phần thân của yêu cầu của bạn với URL được chỉ định.Cú pháp: requests.post (url, data = {key: value}, json = {key: value}, tiêu đề = {key: value}, args) *(data, json, tham số tiêu đề là tùy chọn.)requests. post(url, data={key: value}, json={key: value}, headers={key:value}, args) *(data, json, headers parameters are optional.)

Làm thế nào để bạn truyền tên người dùng và mật khẩu cho một yêu cầu bài đăng trong Python?

Để đạt được xác thực này, thông thường, người ta cung cấp dữ liệu xác thực thông qua tiêu đề ủy quyền hoặc tiêu đề tùy chỉnh được xác định bởi máy chủ.Thay thế người dùng của người dùng và người dùng và truyền qua tên người dùng và mật khẩu của bạn.Nó sẽ xác thực yêu cầu và trả về một phản hồi 200 nếu không nó sẽ trả về lỗi 403.Replace “user” and “pass” with your username and password. It will authenticate the request and return a response 200 or else it will return error 403.