2016-02-07 12 views
5

मैं wget/invoke-webrequest का उपयोग कर एम्बेडेड वेबसर्वर पर कमांड ब्राउज़ करने का प्रयास कर रहा हूं। यह त्रुटि कैसे टाल जा सकती है?पावरहेल wget प्रोटोकॉल उल्लंघन

wget: सर्वर ने प्रोटोकॉल उल्लंघन किया। धारा = ResponseHeader विस्तार = सीआर वामो द्वारा पालन किया जाना चाहिए

पहले से ही सफलता के बिना, कई चीजों की कोशिश की नीचे दिए गए उदाहरण के लिए:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} 

बिट्स के बजाय का उपयोग करते समय इस त्रुटि मैं

हो रही है

स्टार्ट-बिटस्ट्रांसफर: सर्वर ने फ़ाइल का आकार वापस नहीं किया। यूआरएल गतिशील सामग्री को इंगित कर सकता है। सामग्री-लंबाई शीर्षलेख सर्वर के HTTP उत्तर में उपलब्ध नहीं है।

धन्यवाद आपकी मदद के क्लेम

+0

बुला तो इससे पहले कि आपने दो क्लाइंट्स की कोशिश की है: [wget] (https://www.gnu.org/software/wget/) (पावरहेल से) और [माइक्रोसॉफ्ट बीआईटीएस] (https://msdn.microsoft.com/en-us/ पुस्तकालय/aa362708% 28v = vs.85% 29.aspx)। दोनों मामलों में, आपको सर्वर से "प्रोटोकॉल त्रुटियां" मिलती हैं। हमम .... प्रश्न: यदि आप कमांड लाइन, या .bat फ़ाइल से wget चलाते हैं तो क्या होता है? प्रश्न: क्या आप किसी भी * ग्राहक से सर्वर से सफलतापूर्वक बात कर सकते हैं? प्रश्न: सर्वर को वास्तव में क्या करना चाहिए? असफल प्रतिक्रिया क्या है * और यह कैसे लागू किया जाता है? – paulsm4

+0

@ paulsm4 wget को 'Invoke-WebRequest' –

+0

पर अलिया किया गया है, यह सही है, दोनों के साथ समान समस्याएं हैं। एक वाईफाई सक्षम कैमरा से तस्वीरें डाउनलोड करने का प्रयास कर रहा है। एम्बेडेड सर्वर से कनेक्शन ठीक है। जब मैं wux के साथ लिनक्स में यह वही सटीक चीज करता हूं तो यह ठीक काम करता है। हालांकि बीआईटीएस का उपयोग करना पसंद करेंगे। – clem

उत्तर

6

ServerCertificateValidationCallback प्रतिनिधि सेट करने से आपको मदद नहीं करेगा के लिए बहुत बहुत - SSL/TLS है नहीं प्रोटोकॉल करने के लिए भेजा जा रहा है - प्रोटोकॉल उल्लंघन HTTP के संबंध में है शीर्षलेख (उदाहरण के लिए टीएलएस स्थापित किया गया है)।

एक .NET configuration flag called useUnsafeHeaderParsing है जो नियंत्रित करता है कि इस तरह के उल्लंघनों को अनदेखा किया गया है या नहीं।

प्रतिबिंब का उपयोग करके, इसे रनटाइम से भी सेट किया जा सकता है। This Technet forum answer दे के कैसे PowerShell में ऐसा करने का एक बढ़िया उदाहरण है, हम एक गंधा समारोह में लपेट कर सकते हैं कि नीचे की तरह:

function Set-UseUnsafeHeaderParsing 
{ 
    param(
     [Parameter(Mandatory,ParameterSetName='Enable')] 
     [switch]$Enable, 

     [Parameter(Mandatory,ParameterSetName='Disable')] 
     [switch]$Disable 
    ) 

    $ShouldEnable = $PSCmdlet.ParameterSetName -eq 'Enable' 

    $netAssembly = [Reflection.Assembly]::GetAssembly([System.Net.Configuration.SettingsSection]) 

    if($netAssembly) 
    { 
     $bindingFlags = [Reflection.BindingFlags] 'Static,GetProperty,NonPublic' 
     $settingsType = $netAssembly.GetType('System.Net.Configuration.SettingsSectionInternal') 

     $instance = $settingsType.InvokeMember('Section', $bindingFlags, $null, $null, @()) 

     if($instance) 
     { 
      $bindingFlags = 'NonPublic','Instance' 
      $useUnsafeHeaderParsingField = $settingsType.GetField('useUnsafeHeaderParsing', $bindingFlags) 

      if($useUnsafeHeaderParsingField) 
      { 
       $useUnsafeHeaderParsingField.SetValue($instance, $ShouldEnable) 
      } 
     } 
    } 
} 

और फिर तरह का उपयोग करें:

Set-UseUnsafeHeaderParsing -Enable 

Invoke-WebRequest

+0

त्वरित उत्तर प्रतिबिंब का उपयोग करते समय मुझे यह त्रुटि मिलती है जो मैं "2" तर्क के साथ "SetValue" को कॉल करने के अपवाद को हल करने में सक्षम नहीं हूं: "प्रकार का ऑब्जेक्ट" सिस्टम। प्रबंधन। ऑटॉमेशन।स्विच पैरामीटर 'को ' System.Boolean 'में परिवर्तित नहीं किया जा सकता है। " – clem

+0

@clem मैंने स्क्रिप्ट को उस से बचने के लिए अद्यतन किया है :) –

+0

यही था, धन्यवाद @Mathias !! – clem

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