3

私たちのアプリケーションは、Lua を使用して Web サイトからデータを取得する必要があります。ただし、Web サイトには認証が必要です (Google のログイン方法など)。

LuaSocket ライブラリを使用しようとしていますが、コードの完全な例が見つからないため、何をする必要があるかについて半分しか認識していません。

http.request() には、POST データを送信できるようにする 2 番目のオプションのパラメーターがあり、完全な構文を使用して POST メソッドと送信するデータを指定できることは知っていますが、どの形式かはわかりません。データが含まれている必要があり、どのように見えるか。テーブル?弦?何?

コンテンツの種類とコンテンツの長さも設定する必要があることも認識していますが、それらの値がどうあるべきか、またそれらを見つける方法もわかりません。どのオプションとどの書き込みかわかりません。

誰かが私を助けてくれませんか。lua を使用した Google でのサインインの完全なサンプルを教えてください。

それについての助けは非常に高く評価されます。どうもありがとう。

4

1 に答える 1

3

サイトが HTTP 基本認証を使用せず、HTML フォームを使用してユーザーを認証し、サイト開発者にアクセスできない場合、何が起こっているかを把握する最善の方法は、ブラウザーの動作を確認することです。

Firebug または Google Chrome 開発者ツール、または HTTP デバッグ プロキシを起動します。

ブラウザーでサイトを開き、ログインして、ブラウザーがそれを行うために行った要求と、サイトの応答を確認します。プログラムで同じ要求を模倣する必要があります。

ほとんどの場合、Web サイトでは、認証を維持するために、後続のリクエストでセッション情報を送信する必要があることに注意してください。Cookie(または複数)および/またはGETパラメーターの場合があります。繰り返しますが、ブラウザが何をしているかを見て、模倣してください。

形式については、Web で例を検索してください。いくつかあります。

更新: OK、これが例です。

例で使用されている URL はまもなく期限切れになることに注意してください。http://requestb.in/で独自のものを作成してください。ブラウザでhttp://requestb.in/vbpkxivb?inspectを開いて、プログラムが送信したデータを確認します。このサービスに実際のログインとパスワードを送信しないでください。

require 'socket.http'

local request_body = [[login=user&password=123]]

local response_body = { }

local res, code, response_headers = socket.http.request
{
  url = "http://requestb.in/vbpkxivb";
  method = "POST";
  headers = 
  {
    ["Content-Type"] = "application/x-www-form-urlencoded";
    ["Content-Length"] = #request_body;
  };
  source = ltn12.source.string(request_body);
  sink = ltn12.sink.table(response_body);
}

print("Status:", res and "OK" or "FAILED")
print("HTTP code:", code)
print("Response headers:")
if type(response_headers) == "table" then
  for k, v in pairs(response_headers) do
    print(k, ":", v)
  end
else
  -- Would be nil, if there is an error
  print("Not a table:", type(response_headers))
end
print("Response body:")
if type(response_body) == "table" then
  print(table.concat(response_body))
else
  -- Would be nil, if there is an error
  print("Not a table:", type(response_body))
end
print("Done dumping response")

期待される出力:

ステータス: OK
HTTP コード: 200
応答ヘッダー:
日付: 2012 年 6 月 23 日 (土) 07:49:13 GMT
コンテンツタイプ: テキスト/html; 文字セット=utf-8
接続 : 閉じる
コンテンツの長さ: 3
応答本文:
わかった

ダンピング完了応答
于 2012-06-23T06:45:26.660 に答える