Följande funktion fungerar bra så länge URL pekar mot en aspx sida. > HttpWReq.Method = "POST" Hjälper inte att ändra till get! Du behöver ändra mer än POST till GET. När man gör HTTP POST så skickar men info till servern för att den ska utföra något, medan en HTTP GET hämtar info. Vid en GET så skickar men ingen info till webservern (förutom HTTP-headers). Ta därför bort ContentLength, ContentType och myWriter. Exemplet nedan hämtar en GIF bild från dn.se. Kanon! exempelkod..HttpWebRequest
Hur ska man göra om man vill peka på en jpg bild i URL'en?
Får Method Not Allowed på följande rad:
Dim HttpWResp As HttpWebResponse = CType(HttpWReq.GetResponse(), HttpWebResponse)
Private Function Stream(ByVal URL As String)
Dim Result As String
Dim strPost As String = "x=1&y=2&z=YouPostedOk"
Dim myWriter As StreamWriter = Nothing
Dim HttpWReq As HttpWebRequest = CType(WebRequest.Create(URL), HttpWebRequest)
HttpWReq.Method = "POST"
HttpWReq.ContentLength = strPost.Length
HttpWReq.ContentType = "image/jpg" '"application/x-www-form-urlencoded"
Try
myWriter = New StreamWriter(HttpWReq.GetRequestStream())
myWriter.Write(strPost)
Catch e As Exception
Stream = e.Message
Finally
myWriter.Close()
End Try
Dim HttpWResp As HttpWebResponse = CType(HttpWReq.GetResponse(), HttpWebResponse)
Dim sr As New StreamReader(HttpWResp.GetResponseStream())
Result = sr.ReadToEnd()
Stream = Result
End FunctionSv: HttpWebRequest
Felet är här. Du kan inte POST:a till en jpg-bild, endast till skriptfiler. Ändra till "GET".Sv: HttpWebRequest
Då stupar han på följande rad:
myWriter = New StreamWriter(HttpWReq.GetRequestStream())Sv: HttpWebRequest
<code>
Dim URL As String = "http://www.dn.se/content/2/c2/10/dnlogo.gif"
Dim Result As String
Dim HttpWReq As HttpWebRequest = CType(WebRequest.Create(URL), HttpWebRequest)
HttpWReq.Method = "GET"
Dim HttpWResp As HttpWebResponse = CType(HttpWReq.GetResponse(), HttpWebResponse)
Dim sr As New StreamReader(HttpWResp.GetResponseStream())
Result = sr.ReadToEnd()
MsgBox(Result)
</code>
Resultatet blir iofs i detta fall binär data som inte kan visas i en dialog. Du får läsa in det i en stream, skapa en bitmap och visa bilen. Det är faktiskt löjligt enkelt i .NET, se exemplet nedan. Allt jag gjorde var att lägga ut en PictureBox på mitt formulär.
<code>
Dim HttpWReq As HttpWebRequest = CType(WebRequest.Create("http://www.dn.se/content/2/c2/10/dnlogo.gif"), HttpWebRequest)
HttpWReq.Method = "GET"
Dim HttpWResp As HttpWebResponse = CType(HttpWReq.GetResponse(), HttpWebResponse)
' Create a Bitmap from the response stream
Dim b As New Bitmap(HttpWResp.GetResponseStream())
' Load the data into a PictureBox
PictureBox1.Image = b
</code>
/MattiasSv: HttpWebRequest
Men lyckas dock ej läsa upp den i webläsaren!
Har en sida med följande kod:
<img src="streamTest.aspx" border="0">
StreamTest.asp ska i sin tur läsa upp filen i img taggen.Sv: HttpWebRequest
bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
Din WebForm "img.aspx" skall vara helt tom och ha rätt content-type.
Du kanske kan skippa Image/Bitmap objekt och dirigera din inkommande ResponseStream till OutputSream i stället.. jag har inte testat men du borde kolla det.. :)
(kan spara en del minne på servern = mer skalbart system)
Ola