কিভাবে POST অনুরোধ প্রেরণ করবেন?


260

আমি এই স্ক্রিপ্টটি অনলাইনে পেয়েছি:

import httplib, urllib
params = urllib.urlencode({'number': 12524, 'type': 'issue', 'action': 'show'})
headers = {"Content-type": "application/x-www-form-urlencoded",
            "Accept": "text/plain"}
conn = httplib.HTTPConnection("bugs.python.org")
conn.request("POST", "", params, headers)
response = conn.getresponse()
print response.status, response.reason
302 Found
data = response.read()
data
'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
conn.close()

তবে আমি কীভাবে এটি পিএইচপি দিয়ে ব্যবহার করব বা প্যারামের ভেরিয়েবলের ভিতরে থাকা সমস্ত কিছুই কীভাবে ব্যবহার করব তা আমি বুঝতে পারি না। এটি কীভাবে চালিয়ে যাওয়ার চেষ্টা করার সাথে আমি একটু সাহায্য করতে পারি?


1
পোস্টের অনুরোধটি কেবল সার্ভারের পাশেই থাকুক না কেন, অনুরোধ পোস্ট করুন।
ওন্দ্র Žižka

7
এটি একটি পোস্ট অনুরোধ প্রেরণ করে। তারপরে সার্ভারটি আপনার পোস্টে 302 (পুনর্নির্দেশ) শিরোনাম দিয়ে সাড়া দেয়। আসলে কী ভুল?
ddinchev

1
এই স্ক্রিপ্টটি python3.2 compat দেখাচ্ছে না
jdi

পাইথন 3 এর উদাহরণটির সমতুল্য হতে পারে: পেস্টবিন.
জেডি

1
আমি কি সুপারিশ করবে ফায়ারফক্সের ইনস্টল live http headeraddon এবং Firefox এ আপনার URL টি তুলনায় খোলা এবং দেখ request/responseURL টির live http headeraddon চেয়ে কি আপনি বুঝতে হবে params and headersআপনার কোডে না।
রানরাগ

উত্তর:


388

আপনি যদি পাইথন ব্যবহার করে সত্যিই এইচটিটিপি সহ হ্যান্ডেল করতে চান তবে আমি অনুরোধগুলি: মানবদের জন্য এইচটিটিপি সুপারিশ করি । আপনার প্রশ্নের সাথে অভিযোজিত পোষ্ট কুইকস্টার্টটি হ'ল:

>>> import requests
>>> r = requests.post("http://bugs.python.org", data={'number': 12524, 'type': 'issue', 'action': 'show'})
>>> print(r.status_code, r.reason)
200 OK
>>> print(r.text[:300] + '...')

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>
Issue 12524: change httplib docs POST example - Python tracker

</title>
<link rel="shortcut i...
>>> 

আপনি উপরের মত একই ফল পেতে পারি না। আমি পৃষ্ঠায় আরেকটি ইস্যু নম্বর লিখেছিলাম এবং তারপরে স্ক্রিপ্টটি চালাচ্ছি তবে ফলাফলটিতে ইস্যু নম্বরটি দেখতে পেলাম না।
Efe Büyük

2
ডেটা = {'সংখ্যা': '12524' পড়তে দয়া করে ডেটা = {'সংখ্যা': 12524 পরিবর্তন করুন ,. আমি নিজেই এটিকে পরিবর্তন করতাম তবে সম্পাদনাগুলির 6 টির বেশি অক্ষর হওয়া দরকার। ধন্যবাদ
kevthanewversi

2
কিভাবে জসন ফলাফল পাবেন?
যোহানেস এআই

9
আপনার যদি কোনও জেএসওএন অবজেক্ট প্রেরণের প্রয়োজন হয় তবে আপনার করা উচিত: json={'number': 12524...পরিবর্তেdata=...
সেরাফ

3
উত্তরটি কেন "যদি আপনি সত্যই পাইথন ব্যবহার করে এইচটিটিপি ব্যবহার করতে চান" বলে? এইচটিটিপি অনুরোধগুলি পরিচালনা করা কি খারাপ ধারণা? যদি তাই হয় তবে কেন? কেউ দয়া করে ব্যাখ্যা করতে পারেন?
জান Pisl

147

আপনার যদি স্ক্রিপ্টটি পোর্টেবল হওয়ার প্রয়োজন হয় এবং আপনার কোনও তৃতীয় পক্ষের নির্ভরতা নাও রয়েছে, আপনি পাইথন 3 এ খাঁটিভাবে পোষ্ট অনুরোধটি প্রেরণ করুন।

from urllib.parse import urlencode
from urllib.request import Request, urlopen

url = 'https://httpbin.org/post' # Set destination URL here
post_fields = {'foo': 'bar'}     # Set POST fields here

request = Request(url, urlencode(post_fields).encode())
json = urlopen(request).read().decode()
print(json)

নমুনা আউটপুট:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "foo": "bar"
  }, 
  "headers": {
    "Accept-Encoding": "identity", 
    "Content-Length": "7", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Python-urllib/3.3"
  }, 
  "json": null, 
  "origin": "127.0.0.1", 
  "url": "https://httpbin.org/post"
}

6
এই কোডটি কেবল পাইথন 3 এ কাজ করবে, যেমনটি আমি উত্তরে বলেছিলাম।
stil

36

আপনি পোষ্ট অনুরোধগুলি urllib(কেবলমাত্র জিইটি এর জন্য) ব্যবহার করে অর্জন করতে পারবেন না , পরিবর্তে requestsমডিউলটি ব্যবহার করার চেষ্টা করুন , যেমন:

উদাহরণ 1.0:

import requests

base_url="www.server.com"
final_url="/{0}/friendly/{1}/url".format(base_url,any_value_here)

payload = {'number': 2, 'value': 1}
response = requests.post(final_url, data=payload)

print(response.text) #TEXT/HTML
print(response.status_code, response.reason) #HTTP

উদাহরণ 1.2:

>>> import requests

>>> payload = {'key1': 'value1', 'key2': 'value2'}

>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

উদাহরণ 1.3:

>>> import json

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}

>>> r = requests.post(url, data=json.dumps(payload))

4
ধন্যবাদ। ডেটা = জসন.ডাম্পস (পেডলোড) আমার ইউজকেস
আরাম

11

requestsএকটি REST এপিআই শেষ প্রান্তে আঘাত করে GET, POST, PUT বা DELETE তে লাইব্রেরি ব্যবহার করুন । বাকী এপিআই শেষ পয়েন্ট ইউআরএল url, পে-লোড (ডিক) ইন dataএবং শিরোনাম / মেটাডেটা পাস করুনheaders

import requests, json

url = "bugs.python.org"

payload = {"number": 12524, 
           "type": "issue", 
           "action": "show"}

header = {"Content-type": "application/x-www-form-urlencoded",
          "Accept": "text/plain"} 

response_decoded_json = requests.post(url, data=payload, headers=header)
response_json = response_decoded_json.json()

print response_json

2
এই কোডটিতে ইন্ডেন্টেশন এবং শিরোনামের পরম নাম নিয়ে সমস্যা রয়েছে।
xilopaint

2
headersপ্যারামিটারটি ভুল এবং আমাদের এখানে কোনও জসন নেই। আমাদের ব্যবহার করা উচিতjson.dumps(pauload)
আরশ হাতামি

সিনট্যাক্স ত্রুটির জন্য @xilopaint এবং আরশহাটামিকে ধন্যবাদ। এখনই সংশোধন করা হয়েছে।
প্রানজেল

3

আপনার ডেটা ডিকশনারিটি ফর্ম ইনপুট ক্ষেত্রগুলির নাম বোঝায়, ফলাফল সন্ধানের জন্য আপনি কেবল তাদের মানগুলি ঠিক রেখে দিন। ফর্ম দর্শন শিরোনাম আপনার ঘোষিত ধরণের ডেটা পুনরুদ্ধার করতে ব্রাউজারকে কনফিগার করে। অনুরোধের লাইব্রেরি সহ পোষ্ট পাঠানো সহজ:

import requests

url = "https://bugs.python.org"
data = {'@number': 12524, '@type': 'issue', '@action': 'show'}
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept":"text/plain"}
response = requests.post(url, data=data, headers=headers)

print(response.text)

অনুরোধ অবজেক্ট সম্পর্কে আরও: https://requests.readthedocs.io/en/master/api/


1

আপনি যদি কোনও মডিউল ব্যবহার করতে চান না তবে আপনার পছন্দ মতো ইনস্টল করতে হবে requestsএবং আপনার ব্যবহারের কেসটি খুব বেসিক, তবে আপনি ব্যবহার করতে পারেনurllib2

urllib2.urlopen(url, body)

urllib2এখানে ডকুমেন্টেশন দেখুন : https://docs.python.org/2/library/urllib2.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.