2011-07-28 8 views
1

Erlang httpプロキシはありますか? 最高のErlang httpクライアントはどれですか? httpcはドキュメントの湖のようです。たとえば、httpcでCookieヘッダーを送信する方法は? Erlang HTTPプロキシの例、またはmochiwebのプロキシ?Erlangについてhttpプロキシ

+0

これはコメントシステムのテストです。これを無視してください。 –

答えて

2

私はかつてupside-down-ternetwebmachineとimagemagickの組み合わせのような何かをしたプロキシを構築しました。それはthisリソースの例に基づいていました。

私はアレクサンダーと同意するとlhttpcibrowseが最高のhttpクライアントです。私は生産に大きな成功を収めて両方を使用しました。 Erlangで実装さ

2

erlangで書かれた比較的有名なhttpプロキシの名前を思い出すことができません。 http://www.duomark.com/erlang/tutorials/proxy.html

HTTPクライアントに関しては、私はあなたに、通常は、HTTPクライアントがリクエストにクッキーを指定するには、組み込みのメソッドを持っていない場合lhttpcを試すか

をibrowseすることをお勧めします:クイックGoogle検索では、これは明らかにhttp Cookieヘッダーを作成して、httpヘッダーの一部としてhttp要求ハンドラー関数に渡すことができます。

0

私は、誰かが簡単な何かを探しているだけの場合には、まっすぐに、この質問が回答されているが、i`mがここにこれを残して行くの理解します読める。

-module(proxy). 
-define(HTTP_PORT, 80). 
-define(DEFAULT_PROXY_PORT, 8000). 
-export([start/0,start/1,worker/1]). 


start()-> 
    start (?DEFAULT_PROXY_PORT). 

start(Port)-> 
    {ok, Listen} = gen_tcp:listen (Port, [binary, 
        {packet, 0}, 
        {reuseaddr, true}, 
        {active, false}, 
        {delay_send, false}, 
        {nodelay, true}]), 

    server_loop (Listen). 

server_loop (Listen)-> 
    {ok, Socket} = gen_tcp:accept (Listen), 
    spawn (?MODULE, worker, [Socket]), 
    server_loop (Listen). 

worker (Socket)-> 
    {ok, Request} = gen_tcp:recv (Socket, 0), 
    ListRequest = binary_to_list (Request), 
    io:format ("~p ~n", [ListRequest]), 
    [Head, URL | RequestTail] = string:tokens (ListRequest, " "), 
    ["http:", Host | URLTail] = string:tokens (URL, "/"), 
    Document = "/" ++ string:join (URLTail, "/"), 
    NewRequest = string:join ([Head, Document | RequestTail], " "), 
    io:format ("~p ~p ~p~n", [self(), Host, Document]), 
    {ok, SecondSocket} = gen_tcp:connect (Host, ?HTTP_PORT, [binary, 
          {packet, 0}, 
          {active, false}, 
          {delay_send, false}, 
          {nodelay, true}]), 
    ok = gen_tcp:send (SecondSocket, NewRequest), 
    io:format ("~p waiting...~n", [self()]), 
    Response = read_tcp (SecondSocket), 
    io:format ("~p done!~n", [self()]), 
    ok = gen_tcp:send (Socket, Response), 
    gen_tcp:close (SecondSocket), 
    gen_tcp:close (Socket). 

read_tcp (Socket)-> 
    read_tcp (Socket, []). 

read_tcp (Socket, SoFar)-> 
    case gen_tcp:recv (Socket, 0, 500) of 
    {ok, Response} -> 
     read_tcp (Socket, [Response | SoFar]); 
    {error, timeout} -> 
     lists:reverse (SoFar); 
    {error, closed} -> 
     lists:reverse (SoFar) 
    end. 
関連する問題