1

私は php と curl を使用していますが、フォームに問題がありenctype=multipart/form-dataます。

リモート Web ページのフォーム:

<form method="post" enctype="multipart/form-data" action="/account/login" id="login">
<label for="username">Username</label><input name="username" id="username"><br>
<label for="password">Password</label><input name="password" id="password" type="password"><br>
<input type="checkbox" name="keeplogged" id="keeplogged" value="on"><label for="keeplogged">Remember me</label><br>
<input type="submit" name="submit" value="Submit" />
</form>

postデータ (Firefox から) :

POSTDATA =-----------------------------24464570528145
Content-Disposition: form-data; name="username"

fakeuser
-----------------------------24464570528145
Content-Disposition: form-data; name="password"

fakepass
-----------------------------24464570528145
Content-Disposition: form-data; name="keeplogged"

on
-----------------------------24464570528145
Content-Disposition: form-data; name="submit"

Submit
-----------------------------24464570528145--

そして、curlでログインしようとしています:

function login($ref)
{
// Identify the URL:
$url = 'http://www.fakeSite.com/account/login';

$dt = array();
$dt['username'] = 'fakeUser';
$dt['password'] = 'fakePass';
$dt['keeplogged'] = 'on';
$dt['submit'] = 'Submit';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
curl_setopt($curl, CURLOPT_COOKIEJAR, "/tmp/cookie.txt");
curl_setopt($curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt");
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $dt);

$result = curl_exec($curl);

if(curl_errno($curl))//If there is any error
{
    echo 'Curl error: ' . curl_error($curl);
    exit();
}

curl_close($curl);

return $result;
}

しかし、結果は何もありません!結果なし、エラーなし、何もありません! 誰でも何か考えがありますか?

PS: Firefox のものと同じようにフォーマットされたポストフィールドを渡そうとしましたが、これで問題は解決しませんでした。

4

1 に答える 1

0

enctype=multipart/form-data(Proxmox VE)を使用した API で問題が発生しました。

POST配列の代わりに文字列を使用してデータを追加してみてください( with http_build_query) :

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($dt));
于 2012-08-03T18:27:17.883 に答える