2012-01-19 13 views
20

मैं बुनियादी authentatication कर्ल बाकी एपीआई का उपयोग कर के साथ काम करने की है। जब मैं रीस्ट कोड में प्रमाणीकरण जांच अक्षम करता हूं तो यह स्क्रिप्ट ठीक काम करती है।powershell http पोस्ट REST API का बुनियादी प्रमाणीकरण

कर्नल के समान POST अनुरोध पर प्रमाण पत्र पास करने के लिए पावरहेल में सबसे अच्छा तरीका क्या है या मैं निम्नलिखित स्क्रिप्ट को ठीक करने के लिए क्या कर सकता हूं।

वास्तव में इस पर कुछ मार्गदर्शन की सराहना करेंगे। धन्यवाद।

function Execute-HTTPPostCommand() { 
    param(
     [string] $target = $null 
    ) 

    $username = "user" 
    $password = "pass" 

    $webRequest = [System.Net.WebRequest]::Create($target) 
    $webRequest.ContentType = "text/html" 
    $PostStr = [System.Text.Encoding]::UTF8.GetBytes($Post) 
    $webrequest.ContentLength = $PostStr.Length 
    $webRequest.ServicePoint.Expect100Continue = $false 
    $webRequest.Credentials = New-Object System.Net.NetworkCredential -ArgumentList $username, $password 

    $webRequest.PreAuthenticate = $true 
    $webRequest.Method = "POST" 

    $requestStream = $webRequest.GetRequestStream() 
    $requestStream.Write($PostStr, 0,$PostStr.length) 
    v$requestStream.Close() 

    [System.Net.WebResponse] $resp = $webRequest.GetResponse(); 
    $rs = $resp.GetResponseStream(); 
    [System.IO.StreamReader] $sr = New-Object System.IO.StreamReader -argumentList $rs; 
    [string] $results = $sr.ReadToEnd(); 

    return $results; 

} 


$post = "volume=6001F930010310000195000200000000&arrayendpoint=2000001F930010A4&hostendpoint=100000051ED4469C&lun=2" 

$URL = "http://example.com/test/" 

Execute-HTTPPostCommand $URL 

उत्तर

17

आपका कोड अच्छा लग रहा है, मैं $ के लिए HTTP_AUTHORIZATION हेडर को जोड़े की कोशिश करेंगे इस तरह webrequest:

$webRequest.Headers.Add("AUTHORIZATION", "Basic YTph"); 

जहां वाईटीएफ उपयोगकर्ता नाम: पासवर्ड के लिए बेस 64encoded स्ट्रिंग होगा।

+0

धन्यवाद troubleshoot- करने के लिए! यह मेरे लिए किया था। –

+0

आप यूटीएफ -8 बेस 64 स्ट्रिंग प्राप्त करने के लिए http://www.base64encode.org/ का उपयोग कर सकते हैं। – SeriousM

4

साख संपत्ति Windows प्रमाणीकरण के लिए इस्तेमाल किया जा रहा है:

यहाँ मेरी powershell स्क्रिप्ट है। इस समारोह का उपयोग कर प्रयास करें:, कुछ वेब डिबगर उपयोग करने के लिए की तरह फ़िडलर कर्ल अनुरोध और आपके अनुरोध के बीच अंतर को देखने के लिए Forcing Basic Authentication in WebRequest मैं तुम्हें किसी भी मामले में सलाह देंगे

16

मुझे पता है कि यह एक पुराना धागा है, लेकिन उन लोगों के लिए जो इस पर ठोकर खा सकते हैं, इनवेक-रेस्टमेडिंग पावरशेल के साथ एपीआई कॉल करने के लिए एक बेहतर, और सरल है।

बिल्ड एक हैश तालिका के रूप में एक पैरामीटर सूची:

$params = @{uri = 'https:/api.trello.com/1/TheRestOfYourURIpath'; 
        Method = 'Get'; #(or POST, or whatever) 
        Headers = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($acctname):$($password)")); 
      } #end headers hash table 
    } #end $params hash table 

$var = invoke-restmethod @params 

आपका पैरामीटर हैश तालिका थोड़ा अलग हो सकता।

मुझे वास्तव में ट्रेलो के साथ काम करने के लिए यह नहीं मिला है, लेकिन मेरे पास गिटहब, सेरेना बिजनेस मैनेजर और जिरा के साथ है।

+0

सभी को एक नोट: 'Invoke-RestMethod' अधिकांश जेरा आराम एपीआई रिमोट कॉल्स के लिए मेरे लिए अच्छा काम करता है। हालांकि, मुझे पता चला है कि 'फोकस-वर्जन' को प्रभावित करने के लिए 'Invoke-WebRequest' की आवश्यकता है और प्रभाव-संस्करण (' fixVersions', और 'संस्करण', बड़े पैमाने पर परीक्षण किया गया है)। यदि आपको टाइमआउट मिलता है, तो कम से कम इन दोनों के लिए स्विचिंग पर विचार करें। यह हमारे निजी सर्वर जेरा पर एक समस्या है, लेकिन मेरे व्यक्तिगत क्लाउड जेरा उदाहरण पर नहीं। – bunkerdive

0

यह वह कोड है जिसका उपयोग मैं संगम से पृष्ठों को HTML फ़ाइलों के रूप में डाउनलोड करने के लिए करता हूं।

$pageid = "176398584" ; 
$url = "http://wikiserver/wiki/pages/viewpage.action?pageId=$pageid" ; 
write-host "Establish credentials" ; 
$r = Invoke-WebRequest "http://wikiserver/wiki/pages/login.action" -SessionVariable my_session ; 
# $r ; 
$form = $r.Forms[1]; 
# $form ; 

# $c = $host.UI.PromptForCredential('Your Credentials', 'Enter Credentials', '', '') ; 
# $form.fields['os_username'] = $c.UserName ; 
# $form.fields['os_password'] = $c.GetNetworkCredential().Password ; 
$form.fields['os_username'] = "mywikirobotlogonname" ; 
$form.fields['os_password'] = "mywikirobotpassword" ; 
$form.fields['os_cookie']  = "true" ; 
$form.fields['os_destination'] = "%2Fpages%2Fviewpage.action%3FpageId%3D$pageid" ; 

$outputFile = "$pageid.html" ; 
$content = Invoke-WebRequest -Uri ($url + $form.Action) -WebSession $my_session -Method POST -Body $form.Fields ; 
$content.ParsedHTML.getElementById("content").innerHTML | Add-Content $outputFile 

होस्ट यूआई संकेतित उपयोगकर्ता को लॉगऑन जानकारी दर्ज करने के लिए कहा जा सकता है।

टिप्पणी हटाएं एक चर प्रणाली उत्पादन के लिए प्रदर्शित करने के लिए फार्म, पुनः प्राप्त पेज, आदि की सामग्री को $ आर $ प्रपत्र $ सामग्री

संबंधित मुद्दे