|
|
2015/5/5(Tue) 12:13:56|NO.68995
1000円でHSP⇒PHP?CGI?にファイルを
アップロードするソースコード作って頂けないでしょうか?(HSP and PHP?CGI?)
(少ない金額で申し訳ございません。)
SkypeID:
diar.ych.44まで宜しくお願い致します。(お手数ですが.を抜いたIDでコンタクト送信をお願いします。)
|
|
2015/5/5(Tue) 15:21:41|NO.69000
久しぶりに建設的な募集スレを見た気がする。
まぁそれは置いといて、
このスレと少しずれていますが「hsp cgi」で検索すれば結構な数のサンプルコードが出てくるので、
1度自分で挑戦してみるというのも手だと思います。
|
|
2015/5/5(Tue) 18:44:00|NO.69005
途中まで作りました。後はほかの人に頼みます。
PHP
http://kie.nu/2x-Y
HSP
#include "hspsock.as"
#include "hspinet.as"
sdim tmp, 64
file = ""
buf = ""
html = ""
a = 0
filesize = 0
dialog "", 16, ""
if stat == 0 : end
filename = refstr
exist filename : filesize = strsize : sdim file, filesize : bload filename, file : filename = getpath(filename, 8)
mes "アップロード中…"
sockopen 0, "localhost", 80
if stat != 0 : end
sendtext = strf("POST /Uplorder/upload.php HTTP/1.0\nContent-Length: %d\nContent-Type: multipart/form-data; boundary=--AAA\n\n--AAA\ncontent-disposition: form-data; name=\"upfile\"; filename=\"%s\"\n\n%s\n--AAA--", filesize, filename, file)
sockput sendtext
if stat != 0 : sockclose : end
/***************
POST /Uploader/upload.php HTTP/1.0
Content-Length: [ファイルサイズ]
Content-Type: multipart/form-data; boundary=--AAA
--AAA
content-disposition: form-data; name="upfile"; filename="[ファイル名]"
[ファイル内容]
--AAA--
***************/
repeat
await
sockget tmp, 64
if stat != 0 : sockclose : end
a = peek(tmp, 0)
if a == 0 : break
buf += tmp
loop
split buf, "\n\n", tmp, html
nkfcnv html, html, "Ws"
cls
axobj ie, "Shell.Explorer.2", ginfo_winx, ginfo_winy
ie -> "Navigate" "about:blank"
doc = ie("Document")
doc -> "write" html
stop
| |
|
2015/5/6(Wed) 23:11:58|NO.69037
返信が遅れて申し訳ございません。
>>スペース(HSP歴3年)さん
ご指摘ありがとうございます。
今日1日調べてたのですが中々難しいですね・・・。
cgiに関して色々試行錯誤している最中です。
>>princeさん
おお、わざわざソースコードまでありがとうございます( _ _ )
早速これも1日中、色々思考錯誤しながら動作させていたのですがどうしてもファイルの生成にすら辿りつけませんでしたOrz
(Content-typeをjpg指定にしたり)
sendtextに追加する情報が足りないでしょうか?
もう少しヒントを頂けないでしょうか( _ _ )、宜しくお願いします。
|
|
2015/5/7(Thu) 01:45:29|NO.69040
すいません。
何とかなりそうなので再度頑張ってみます。
|
|
2015/5/7(Thu) 18:57:19|NO.69050
ちょっと説明が雑すぎましたね…
すみません。
PHPのほうは問題ないのですが、HSPのHTTPリクエストが間違ってるようです。
POSTでデータを送信するときの仕様が検索しても私にはよくわかりませんでした。
コメントを入れておきました(少し改造も)。
#include "hspsock.as" //通信用
#include "hspinet.as" //文字コード変換用
tmp = "" //一時バッファ
FileBuf = "" //ファイル内容
FilePath = "" //ファイルパス
FileName = "" //ファイル名
Request = "" //HTTPリクエスト
Response = "" //HTTPレスポンス
HTML = "" //レスポンスのうちHTMLの部分
a = 0 //受信確認用
FileSize = 0 //ファイルサイズ
dialog "", 16, "" //ファイル選択
if stat == 0 : end //選択されなかったら終了
FilePath = refstr : FileName = getpath(FilePath, 8) //ファイル名・パスを変数に代入
exist FilePath : FileSize = strsize //ファイルサイズを変数に代入
sdim FileBuf, FileSize : bload FilePath, FileBuf //ファイル読み込み
mes "アップロード中…"
sockopen 0, "localhost", 80 //サーバーに接続
if stat != 0 : end //失敗したら終了
//データを送信(sockputbにすべきかも?)
sendtext = strf({"POST /Uplorder/upload.php HTTP/1.0
Content-Length: %d
Content-Type: multipart/form-data; boundary=--AAA
--AAA
content-disposition: form-data; name=\"upfile\"; filename=\"%s\"
%s
--AAA--"}, FileSize, FileName, FileBuf)
sockput sendtext
if stat != 0 : sockclose : end //失敗したら終了
/***************
↓リクエストの中身 これが間違っていると思われる
POST /Uploader/upload.php HTTP/1.0
Content-Length: [ファイルサイズ]
Content-Type: multipart/form-data; boundary=--AAA
--AAA
content-disposition: form-data; name="upfile"; filename="[ファイル名]"
[ファイル内容]
--AAA--
***************/
//レスポンス受信
repeat
await
sockget tmp, 64
if stat != 0 : sockclose : end
a = peek(tmp, 0)
if a == 0 : break
Response += tmp
loop
//ヘッダ部分(使わないので適当な変数に)とHTML部分に分割
split Response, "\n\n", tmp, HTML
//文字コード変換
nkfcnv HTML, HTML, "Ws"
//画面リセット
color 255, 255, 255 : boxf : pos 0, 0
//IEコンポーネントに表示
axobj ie, "Shell.Explorer.2", ginfo_winx, ginfo_winy
ie -> "Navigate" "about:blank"
doc = ie("Document")
doc -> "write" HTML
stop
| |
|
2015/5/9(Sat) 23:17:20|NO.69120
こんな感じかなと
#include "hspsock.as" //通信用
#include "hspinet.as" //文字コード変換用
tmp = "" //一時バッファ
FileBuf = "" //ファイル内容
FilePath = "" //ファイルパス
FileName = "" //ファイル名
Request = "" //HTTPリクエスト
Response = "" //HTTPレスポンス
HTML = "" //レスポンスのうちHTMLの部分
a = 0 //受信確認用
FileSize = 0 //ファイルサイズ
boundary = "" // 区切り文字
reqBody = "" // リクエストボディ部
lastBody = "" // リクエストボディ部末端
reqHeader = "" // リクエストヘッダ部
bodySize = "" // リクエストボディ部サイズ
host = "localhost" // アップロード先ホスト名(例:hsp.tv)
uri = "/Uplorder/upload.php" // アップロードPHPまでのパス
dialog "", 16, "" //ファイル選択
if stat == 0 : end //選択されなかったら終了
FilePath = refstr : FileName = getpath(FilePath, 8) //ファイル名・パスを変数に代入
exist FilePath : FileSize = strsize //ファイルサイズを変数に代入
sdim FileBuf, FileSize : bload FilePath, FileBuf //ファイル読み込み
// 区切り文字(適当なランダムな文字列を使用します)
randomize
boundary = "---------------------------" + strf("%08x%04x%04x", FileSize, rnd(32768), rnd(32768))
mes "アップロード中…"
sockopen 0, host, 80 //サーバーに接続
if stat != 0 : end //失敗したら終了
//データを送信(sockputbにすべきかも?)
// 先にRequestBody部を作成(Body部のサイズが必要な為)
reqBody = strf({"--%s
Content-Disposition: form-data; name="upfile"; filename="%s"
Content-Type: application/octet-stream
"}, boundary, FileName)
// RequestBody部の末端
lastBody = strf("\n--%s--", boundary)
// RequestBody部のサイズを計算
bodySize = strlen(reqBody) + strlen(lastBody) + FileSize
// RequestHeaderの作成
reqHeader = strf({"POST %s HTTP/1.0
Host: %s
Content-Length: %d
Content-Type: multipart/form-data; boundary=%s
"}, uri, host, bodySize, boundary)
sockput reqHeader
if stat != 0 : sockclose : end //失敗したら終了
sockput reqBody
if stat != 0 : sockclose : end //失敗したら終了
sockputb FileBuf, 0, FileSize
if stat == 0 : sockclose : end //失敗したら終了
sockput lastBody
if stat != 0 : sockclose : end //失敗したら終了
/***************
↓リクエストの中身 これが間違っていると思われる
POST /Uploader/upload.php HTTP/1.0
Content-Length: [ファイルサイズ]
Content-Type: multipart/form-data; boundary=--AAA
--AAA
content-disposition: form-data; name="upfile"; filename="[ファイル名]"
[ファイル内容]
--AAA--
***************/
//レスポンス受信
repeat
await 12
sockget tmp, 64
if stat != 0 : sockclose : end
a = peek(tmp, 0)
if a == 0 : break
Response += tmp
loop
//ヘッダ部分(使わないので適当な変数に)とHTML部分に分割
split Response, "\n\n", tmp, HTML
//文字コード変換
nkfcnv HTML, HTML, "Ws"
//画面リセット
color 255, 255, 255 : boxf : pos 0, 0
//IEコンポーネントに表示
axobj ie, "Shell.Explorer.2", ginfo_winx, ginfo_winy
ie -> "Navigate" "about:blank"
doc = ie("Document")
doc -> "write" HTML
stop
| |
|