URLを書き換えて包囲でテストしていますが、1つの問題がありました。
gwan は、ハンドラー接続でメイン関数の 2 回の呼び出しに同じアドレスを使用する場合があります。2 つの呼び出しを区別するために、rand() で整数を使用します。
以下の例では、非常に近い 2 つの呼び出しに対して同じアドレスが見つかりました ...
init 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
init 687109171 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
regex OK 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
extarctPart 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
regex OK 687109171 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
rewriteJPG 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
xbufreplace 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew/imagesgallery/BIG/100018.jpg HTTP/1.1
-- HERE buffer is changed by the previous step because both have the same address --
extarctPart 687109171 : buff 0x10d3760 -> GET /imagesproduitnew/imagesgallery/BIG/100018.jpg HTTP/1.1
この問題を解決するには、別のサーバーから別の URL のリストを使用して siege を使用します。
ご協力いただきありがとうございます
URL を書き換える必要があります: /-100018-imagesgallery/BIG-1.jpg ファイルに送信する必要があります /imagesproduitnew/imagesgallery/BIG/100018.jpg
これのための私のコード:
int main(int argc, char *argv[])
{
const long state = (long)argv[0];
if(state == HDL_AFTER_READ)
{
int test = rand();
xbuf_t *read_xbuf = (xbuf_t*)get_env(argv, READ_XBUF);
printf ("init %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
//function to test if URL needs to be rewrite
if(regexRewriteJPG(read_xbuf->ptr) == 0){
printf ("regex OK %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
char *URL;
char *newURL;
//extractPart, extract the URL from buffer (/imagesproduitnew-100018-imagesgallery/BIG-1.jpg for exemple)
URL = extractPart(read_xbuf->ptr, str_regexJPG);
printf ("extarctPart %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
if(URL){
//rewriteJPG return the reel path of the file (/imagesproduitnew/imagesgallery/BIG/100018.jpg for exemple)
newURL = rewriteJPG(URL);
printf ("rewriteJPG %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
if(newURL){
xbuf_repl(read_xbuf, URL, newURL);
printf ("xbufreplace %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
free(newURL);
}
else{
printf("newURL is NULL\n");
}
free(URL);
}
else{
printf("URL is NULL\n");
}
}
printf ("END %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
}
return 255; // execute next connection
}