ফাইল_জেট_কন্টেন্টস ব্যবহার করে কীভাবে পিএইচপি তে ডেটা পোস্ট করবেন?


299

আমি file_get_contents()কোনও ইউআরএল এর বিষয়বস্তু আনতে পিএইচপি এর ফাংশনটি ব্যবহার করছি এবং তারপরে আমি ভেরিয়েবলের মাধ্যমে শিরোনামগুলি প্রসেস করি $http_response_header

এখন সমস্যাটি হ'ল ইউআরএল কিছু URL টি পোস্ট করার জন্য কিছু ডেটা প্রয়োজন (উদাহরণস্বরূপ, লগইন পৃষ্ঠাগুলি)।

আমি কেমন করে ঐটি করি?

আমি স্ট্রিম_কন্টেক্সট ব্যবহার করে বুঝতে পারি যে আমি এটি করতে সক্ষম হতে পারি তবে আমি সম্পূর্ণ পরিষ্কার নই।

ধন্যবাদ।



8
এটি অসীমভাবে upvated করা উচিত। আপনার যদি কাজটি করে কাঁচা পিএইচপি কার্যকারিতা থাকে তবে কার্ল / গুজল বা অন্য কোনও অভিনব গ্রন্থাগার ব্যবহার করার কোনও কারণ নেই।
ওমর আবিদ

উত্তর:


589

HTTP পোষ্ট অনুরোধটি ব্যবহার করে প্রেরণ করা এতটা file_get_contentsকঠিন নয়, আসলে: আপনি যেমন অনুমান করেছিলেন, আপনাকে $contextপ্যারামিটারটি ব্যবহার করতে হবে ।


এই পৃষ্ঠায় পিএইচপি ম্যানুয়ালটিতে একটি উদাহরণ দেওয়া আছে: HTTP প্রসঙ্গ বিকল্পগুলি (উদ্ধৃতি) :

$postdata = http_build_query(
    array(
        'var1' => 'some content',
        'var2' => 'doh'
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-Type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context  = stream_context_create($opts);

$result = file_get_contents('http://example.com/submit.php', false, $context);

মূলত, আপনাকে সঠিক বিকল্পগুলি (সেই পৃষ্ঠায় একটি সম্পূর্ণ তালিকা রয়েছে) সহ একটি স্ট্রিম তৈরি করতে হবে এবং এটির তৃতীয় প্যারামিটার হিসাবে ব্যবহার করতে হবে file_get_contents---)


একটি সাইডেনোট হিসাবে: সাধারণত কথা বলতে গেলে, HTTP পোষ্ট অনুরোধগুলি প্রেরণ করার জন্য, আমরা কার্ল ব্যবহার করার প্রবণতা করি যা প্রচুর বিকল্প সরবরাহ করে - তবে স্ট্রিমগুলি পিএইচপি এর একটি দুর্দান্ত জিনিস যা সম্পর্কে কেউই জানে না ... খুব খারাপ .. ।


1
ধন্যবাদ। আমি অনুমান করছি যে অনুরোধকৃত পৃষ্ঠায় যদি আমার একই পোষ্ট পরমগুলি পাস করার প্রয়োজন হয় তবে আমি contents _POST থেকে $ পোস্টডাটাতে সামগ্রীগুলি সন্নিবেশ করতে পারি?
পারস চোপড়া

6
আমার ধারণা আপনি এরকম কিছু করতে পারেন; তবে contentঅবশ্যই পিএইচপি অ্যারে হওয়া উচিত নয়: এটি একটি ক্যোরিস্ট্রিং হতে হবে (যেমন এটির অবশ্যই এই ফর্ম্যাটটি থাকতে হবে param1=value1&param2=value2&param3=value3:) ;; যার অর্থ আপনার সম্ভবত ব্যবহার করতে হবেhttp_build_query($_POST)
পাসকাল মার্টিন

2
চমৎকার! আমি পোস্টের ডেটা অন্য পৃষ্ঠায় পাস করার একটি উপায় খুঁজছিলাম যা তা করার মাধ্যমে অর্জনযোগ্য $postdata = http_build_query($_POST)
লিয়াম নিউমার্চ

1
পর্যাপ্ত পরিমাণে ইন্টারেস্টিং করা আমার পক্ষে মোটেও কাজ করে না আমি কয়েক ঘন্টা চেষ্টা করেছিলাম এবং আমার সমস্ত রিকোয়েটগুলি কোয়েরিতে পরিণত হয়
ওয়াজনসটেক

1
একাধিক শিরোনাম মান প্রেরণ করতে, \r\nলাইন ব্রেকগুলির সাথে সেগুলিকে সমস্ত স্ট্রিংয়ে ফেলে দিন - দেখুন: stackoverflow.com/a/2107792/404960
rymo

20

একটি বিকল্প, আপনি fopen ব্যবহার করতে পারেন

$params = array('http' => array(
    'method' => 'POST',
    'content' => 'toto=1&tata=2'
));

$ctx = stream_context_create($params);
$fp = @fopen($sUrl, 'rb', false, $ctx);
if (!$fp)
{
    throw new Exception("Problem with $sUrl, $php_errormsg");
}

$response = @stream_get_contents($fp);
if ($response === false) 
{
    throw new Exception("Problem reading data from $sUrl, $php_errormsg");
}

কিছু কারণে, এটি আমার পক্ষে কাজ করেছে, কিন্তু পিএইচপি অফিসিয়াল উদাহরণটি তা দেয় নি। toto=1&tata=2পাশাপাশি +1 । আমি fopenঅবশ্য ব্যবহার করিনি ।
মাইকেল ইয়াওওয়ারস্কি

4
@ .Iĺàɗ আমরা এখানে মানুষকে 'নুব' বলি না। এটি এর বিরুদ্ধে বন্ধুত্বপূর্ণ সতর্কতা।
দাদালাস

0
$sUrl = 'http://www.linktopage.com/login/';
$params = array('http' => array(
    'method'  => 'POST',
    'content' => 'username=admin195&password=d123456789'
));

$ctx = stream_context_create($params);
$fp = @fopen($sUrl, 'rb', false, $ctx);
if(!$fp) {
    throw new Exception("Problem with $sUrl, $php_errormsg");
}

$response = @stream_get_contents($fp);
if($response === false) {
    throw new Exception("Problem reading data from $sUrl, $php_errormsg");
}

2
দয়া করে কোড অনুলিপি / পেস্ট করার পরিবর্তে একটি বিস্তৃত উত্তর দেওয়ার চেষ্টা করুন।
ফিলিপ লিওও

1
এছাড়াও এটি অযথা জটিল। আপনি + এর file_get_contentsপরিবর্তে ব্যবহার করতে পারেন । এবং আপনি "ফাইল" বন্ধ করছেন না। @ প্যাসালমার্টিন দ্বারা গৃহীত উত্তর দেখুন। fopenstream_get_contents
মার্টিন প্রিক্রিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.