আমি কীভাবে ভিবিএ ব্যবহার করে এক্সেল থেকে কোনও সার্ভারে এইচটিটিপি পোস্ট অনুরোধ পাঠাতে পারি?


উত্তর:


147
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send("")

বিকল্পভাবে, HTTP অনুরোধের উপর বৃহত্তর নিয়ন্ত্রণের জন্য আপনি WinHttp.WinHttpRequest.5.1এর জায়গায় ব্যবহার করতে পারেন MSXML2.ServerXMLHTTP


9
এইচটিটিপি অনুরোধের উপর বৃহত্তর নিয়ন্ত্রণের জন্য আপনি "এমএসএক্সএমএল 2. সার্ভারএক্সএমএলএইচটিটিপি" এর পরিবর্তে "উইনহট্ট্প.উইনটিএইচটিপিআরকিউয়েস্ট 5.5" ব্যবহার করতে পারেন
ম্যাথিউ

5
লক্ষণীয় যে আপনি "POST" কে "PUT" এ পরিবর্তন করে এইচটিটিপি PUT জারির জন্য এটি ব্যবহার করতে পারেন। PUT এ থাকা সামগ্রী .send () পদ্ধতিতে যায়। আপনার অতিরিক্ত অতিরিক্ত শিরোনামগুলি সেট করতে হবে ব্যবহারকারীর এজেন্ট উদাহরণে ব্যবহৃত সিনট্যাক্স অনুসরণ করেও can
র‌্যাডিক্যান্ড

7
আপনি সাবটির রিটার্ন মানটি ব্যবহার না করে দয়া করে প্যারামিটারগুলির আশেপাশে বন্ধনী ব্যবহার করবেন না: ভিবিএ সিন্ট্যাক্স সাব এর পরামিতিগুলির আশেপাশে প্রথম বন্ধনীর অনুমতি দেয় না (যদিও ফাংশনের জন্য তাদের প্রয়োজন হয়), সুতরাং এই বন্ধনীগুলি অপারেটরের নজির স্পষ্ট করার জন্য ব্যবহৃত পাটিগণিতগুলি প্রথমত ব্যবহৃত হয়। বিভ্রান্তিমূলক এবং অস্পষ্ট হওয়া ছাড়া, যুক্তিটি কোনও বস্তু হলে এটি শেষ পর্যন্ত রানটাইম ত্রুটির কারণ হতে পারে। এবং যদিও স্পষ্টভাবে জিজ্ঞাসা করা হয়নি, সাধারণত আপনি HTTP প্রতিক্রিয়া ব্যবহার করতে চান, যা আপনি উল্লেখ করতে পারেন এর মাধ্যমে পুনরুদ্ধার করা যেতে পারে objHTTP.responseText
লিবিয়াথন

4
@ লেভিয়াথান প্যারেনরা আসলে এর চেয়ে আরও বেশি কিছু করেন: তারা ভিবিএ রানটাইমকে এক্সপ্রেশনটিকে একটি মান হিসাবে মূল্যায়ন করে এবং পদ্ধতিটির স্বাক্ষরটি বলে কিনা তা নির্বিশেষে বাইভালকে পদ্ধতিতে পাস করে । এজন্য তাদের কোনও ধরণের অবজেক্ট ভেরিয়েবলের সাথে ব্যবহার করা যদি ডিফল্ট সদস্য না থাকে তবে রান-টাইমের ত্রুটি ঘটায়; এবং একটি বস্তু যে তাদের ব্যবহার করে একটি ডিফল্ট সদস্য আছে, ডিফল্ট সদস্যের মান পাসের প্রকৃত বস্তুর পরিবর্তে। ByRef
ম্যাথিউ গিন্ডন

1
এক মিলিয়ন বার আপনাকে ধন্যবাদ। কেন জানি না, কারণ আমি এটি অন্য কোনও উদাহরণে দেখিনি, তবে "ব্যবহারকারী-এজেন্ট" শিরোনামটি আমার পক্ষে অত্যন্ত গুরুত্বপূর্ণ, কারণ অন্যথায় আমার অনুরোধে দেহটি প্রেরণ করা হয়নি।
red অক্টোবর 13

51

আপনার যদি ম্যাক এবং উইন্ডোজ উভয় ক্ষেত্রেই কাজ করার প্রয়োজন হয় তবে আপনি কোয়েরি টেবিলগুলি ব্যবহার করতে পারেন:

With ActiveSheet.QueryTables.Add(Connection:="URL;http://carbon.brighterplanet.com/flights.txt", Destination:=Range("A2"))
    .PostText = "origin_airport=MSN&destination_airport=ORD"
    .RefreshStyle = xlOverwriteCells
    .SaveData = True
    .Refresh
End With

মন্তব্য:

  • আউটপুট সম্পর্কিত ... আমি জানি না যে ভিবিএ ফাংশন বলে অভিহিত করা একই কক্ষে ফলাফলগুলি ফিরিয়ে দেওয়া সম্ভব কিনা। উপরের উদাহরণে ফলাফলটি এ 2 তে লেখা আছে।
  • ইনপুট সম্পর্কিত ... আপনি নির্দিষ্ট কক্ষগুলি পরিবর্তন করার সময় আপনি যদি ফলাফলগুলি রিফ্রেশ করতে চান, নিশ্চিত করুন যে সেগুলি আপনার ভিবিএ ফাংশনের যুক্তি are
  • এটি ম্যাক ২০০৮ এর এক্সেলের জন্য কাজ করবে না, যার ভিবিএ নেই। ম্যাক 2011 এর জন্য এক্সেল ভিবিএ ফিরে পেয়েছে।

আরও বিশদের জন্য, আপনি " এক্সেল থেকে ওয়েব পরিষেবা ব্যবহার " সম্পর্কে আমার সম্পূর্ণ সারাংশ দেখতে পারেন ।


3
+1: আমার এটি কেবল উইন্ডোজে প্রয়োজন তবে ক্রস প্ল্যাটফর্ম সমাধানটি অন্য কারও পক্ষে উপকৃত হতে পারে।
ম্যাথিউ মারডোক

আমি মনে করি না আপনি আসলে এইচটিএমএল কোডটি অ্যাক্সেস করতে পারবেন, আপনি কেবল রেন্ডার করা ওয়েব পৃষ্ঠায় (আসল এইচটিএমএল কোড নয়) তথ্য পেতে পারেন
user1493046

1
ক্রস-প্ল্যাটফর্ম সমাধানের জন্য +1 এবং গিস্ট লিঙ্ক এবং সমস্ত সহ পুরো সংক্ষিপ্তসার জন্য +1 (যদি আমি পারতাম)। ধন্যবাদ !!
বিমান হামলায়

আমাকে উইন্ডোজ এবং ম্যাক উভয়ই সমর্থন করতে হয়েছিল, এবং এই সমাধানটি ঠিক ছিল! মনে রাখবেন যে আপনি পোস্ট টেক্সট নির্দিষ্ট করার সময়, URL টি পোষ্ট অনুরোধগুলি প্রক্রিয়া করা উচিত, অন্যথায় এটি জিইটি অনুরোধগুলি প্রক্রিয়া করবে।
অমলক

1
ফলাফলগুলি কি কোনও রেঞ্জের পরিবর্তে পরিবর্তনশীলতে আউটপুট দেওয়া সম্ভব? কিছু জেসন পার্সিং করা দরকার।
স্ট্যানিস্লাসড্রাগ মনিকা

42

বিল দ্য টিকটিকির অ্যাঞ্জার ছাড়াও :

বেশিরভাগ ব্যাকেন্ডস কাঁচা পোস্টের ডেটা পার্স করে। পিএইচপি উদাহরণস্বরূপ, আপনার কাছে একটি অ্যারে থাকবে $_POSTযাতে পোস্ট ডেটার মধ্যে স্বতন্ত্র ভেরিয়েবলগুলি সংরক্ষণ করা হবে। এই ক্ষেত্রে আপনাকে একটি অতিরিক্ত শিরোনাম ব্যবহার করতে হবে "Content-type: application/x-www-form-urlencoded":

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("var1=value1&var2=value2&var3=value3")

অন্যথায় আপনাকে ভেরিয়েবলের কাঁচা পোস্ট ডেটা পড়তে হবে "$HTTP_RAW_POST_DATA"


1
আমি এই অনুরোধটি পোস্ট করার চেষ্টা করছি (কোঁকড়ানো ধনুর্বন্ধনী সহ) এবং সংকলন ত্রুটিগুলি পেতে ... আপনি কী সাহায্য করতে পারেন: "request" অনুরোধ ": car" কারনাম ":" হোন্ডা "," মডেল ":" 1A5 "}}"
বেহালার

6

আপনি ServerXMLHTTPএকটি ভিবিএ প্রকল্পে একটি রেফারেন্স যুক্ত করে ব্যবহার করতে পারেন MSXML

  1. ভিবিএ সম্পাদক খুলুন (সাধারণত একটি ম্যাক্রো সম্পাদনা করে)
  2. উপলব্ধ রেফারেন্সের তালিকায় যান
  3. মাইক্রোসফ্ট এক্সএমএল পরীক্ষা করুন
  4. ঠিক আছে ক্লিক করুন।

( ভিবিএ প্রকল্পের মধ্যে রেফারেন্সিং এমএসএক্সএমএল থেকে )

ServerXMLHTTP MSDN ডকুমেন্টেশন সব বৈশিষ্ট্য এবং ServerXMLHTTP পদ্ধতি সম্পর্কে পূর্ণ বিবরণ আছে।

সংক্ষেপে যদিও, এটি মূলত এটির মতো কাজ করে:

  1. খোলা কলরিমোট সার্ভারে সংযোগ রাখতে পদ্ধতিতে
  2. কল প্রেরণ অনুরোধ পাঠাতে।
  3. রেসপন্সএক্সএমএল , রেসপন্সটেক্সট , রেসপন্স স্ট্রিম বা রেসপন্সবডি এর মাধ্যমে প্রতিক্রিয়াটি পড়ুন

1
সেই লিঙ্কটি জেএসক্রিপ্ট ব্যবহার করে, ভিবিএ নয়
জন হেন্কেল

1
ধন্যবাদ @ জনহেন্কেল। আমি উত্তরটি আপ টু ডেট আনতে কিছু পরিবর্তন করেছি।
মার্ক বাইক

3

অন্যান্য ব্যবহারকারীর প্রতিক্রিয়া সম্পূর্ণ করতে:

এর জন্য আমি একটি "WinHttp.WinHttpRequest.5.1" অবজেক্ট তৈরি করেছি।

এক্সবি থেকে ভিবিএ ব্যবহার করে কিছু ডেটা সহ একটি পোস্টের অনুরোধ প্রেরণ করুন:

Dim LoginRequest As Object
Set LoginRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
LoginRequest.Open "POST", "http://...", False
LoginRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
LoginRequest.send ("key1=value1&key2=value2")

ভিবিএ ব্যবহার করে এক্সেল থেকে টোকেন প্রমাণীকরণের সাথে একটি অনুরোধ পাঠান:

Dim TCRequestItem As Object
Set TCRequestItem = CreateObject("WinHttp.WinHttpRequest.5.1")
TCRequestItem.Open "GET", "http://...", False
TCRequestItem.setRequestHeader "Content-Type", "application/xml"
TCRequestItem.setRequestHeader "Accept", "application/xml"
TCRequestItem.setRequestHeader "Authorization", "Bearer " & token
TCRequestItem.send

ডেভিড, আপনি একবার অনুরোধটি প্রেরণ করলেন, আপনি কীভাবে প্রতিক্রিয়াটি পড়বেন?
PS0604

প্রতিক্রিয়া ভিতরে রয়েছে TCRequestItem Object, আপনি এটি পড়তে পারেন: করার TCRequestItem.ResponseTextপরেTCRequestItem.send
ডেভিড কিউ

0

আমি এমএসএক্সএমএল লাইব্রেরি ব্যবহার করার আগে এবং তারপর এক্সএমএলএইচটিপিআরকোয়েস্ট অবজেক্টটি ব্যবহার করার আগে এখানে করেছি


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