hspsockのHTTP通信について
名無し 2013/5/25(Sat) 19:04:16|NO.54281
hspsockを使って、HTTP通信をしようと思ったのですが
404しか出ません。どうすればいいでしょうか?
ブラウザなどでURLを直接入力すれば、普通にアクセスができます。
#include "hspsock.as"
;
; TCP/IP socket sample for HSP3.0
; HTTPサーバーと接続してファイルを受信する
;
cls 1
sdim buf,32000
;
pos 0,128
mesbox buf,620,310,1
objsize 100,24,24
;
pos 100,0
url="":rdir=""
input url,480
input rdir,480
;
pos 0,0
mes "URL HTTP://"
mes "DIRECTORY"
;
pos 0,60
button "CONNECT",*sd
button "BYE",*bye
;
rdir="/play/pforum.php":objprm 2,rdir
url="hsp.tv":objprm 1,url
wait 10
;
stop
*sd
; HTTPに接続、ファイルを取得
;
title "Connecting... ["+url+rdir+"]"
sockopen 0,url,80
if stat : dialog "ERROR\nSTAT="+stat : goto *sdover
sockput "GET "+rdir+" HTTP/1.0\nHost:???\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7\n\n"
if stat : dialog "socket error" : goto *sdover
;
buf="":a=""
b=0:sz=0
*wloop
await 0
sockget a,64
if stat : dialog "socket error" : goto *sdover
b=peek(a,0):if b=0 : goto *sdok
buf+=a
sz+=64:title "recieve "+sz
if sz>30000 : dialog "受信サイズがオーバーしました。" : goto *sdok
goto *wloop
*sdok
objprm 0,buf
title "Completed."
*sdover
sockclose
stop
*bye
end
晩御飯 2013/5/25(Sat) 19:12:08|NO.54282
うろ覚えだけどリクエスト送るとき\nじゃなくて\r\nだったと思うよ
どこぞのだれか 2013/5/25(Sat) 19:23:28|NO.54283
こちらを参考に。
http://hsp.tv/play/pforum.php?mode=pastwch&num=1404
test 2013/5/25(Sat) 19:23:47|NO.54284
Hostヘッダを???としているのが原因です。
Hostヘッダはなんというドメイン名のサーバーにアクセスしようとしているかを相手に伝えるためのものです。
Webサイトにアクセスする場合、DNSでサーバーのIPアドレスを取得してそこにリクエストを送ります。しかし、同じサーバーが別のドメイン名のサイトも持っていた場合、サーバー側はどのサイトにアクセスされたか分かりません。
そこで、どのドメイン名のサイトにアクセスしたいのかを相手に教えるのがHostヘッダの役割です。
そのHostヘッダで変な情報を送ったので、サーバー側が勘違いして404を返したのだと思います。
名無し 2013/5/25(Sat) 19:36:42|NO.54285
皆様、回答ありがとうございます。
>>Hostヘッダを???としているのが原因です。
原因はこれでした。