1

やあみんな私はここに状況があります...

クライアントが指定された資格情報でWebサイトにログインし、同じWebサイトのURLにファイルをアップロードしたいJavaプログラムに取り組んでいます...問題は、クライアントがユーザーログインが認証され、設定されているかどうかを知っていることですCookieまたはセッションを使用して..

ログインとアップロードの両方に HttpClient を使用していて、コードを書き終えました。問題は、ファイルをアップロードするときに「403 Forbidden」が表示されることです。Cookie とセッションのリストを取得して、ログイン URL 出力から取得し、リクエストが認証されたユーザーからのものであると見なしてアップロードするように設定する方法はありますか。

詳細については、スクリプトを添付してください:

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils;
import org.apache.http.Header;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.entity.mime.content.FileBody;

public class Main {

    Header[] cookie = null;

    public void sendLoginRequest() {
        try {
            HttpClient httpclient = new DefaultHttpClient();
            httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

            HttpPost httppost = new HttpPost("http://website.com/login");

            MultipartEntity mpEntity = new MultipartEntity();
            mpEntity.addPart("email", new StringBody("user@website.com"));
            mpEntity.addPart("password", new StringBody("123456"));

            httppost.setEntity(mpEntity);
            System.out.println("executing request " + httppost.getRequestLine());
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity resEntity = response.getEntity();

            System.out.println(response.getStatusLine());
            if (resEntity != null) {
                System.out.println(EntityUtils.toString(resEntity));
            }
            if (resEntity != null) {
                resEntity.consumeContent();
            }

            cookie = (Header[]) response.getHeaders("Set-Cookie");
            for(int h=0; h<cookie.length; h++){
                System.out.println(cookie[h]);
            }

            httpclient.getConnectionManager().shutdown();

            sendFileRequest();
        } catch (IOException ex) {
            //Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void sendFileRequest(){
        try {
            HttpClient httpclient = new DefaultHttpClient();
            httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

            HttpPost httppost = new HttpPost("http://website.com/uploadpage");
            httppost.setHeaders(cookie);

            File file = new File("somefile.jpg");

            MultipartEntity mpEntity = new MultipartEntity();
            ContentBody cbFile = new FileBody(file, "image/jpeg");
            mpEntity.addPart("Filedata", cbFile);
            mpEntity.addPart("MAX_FILE_SIZE", new StringBody("268435456"));

            httppost.setEntity(mpEntity);
            System.out.println("executing request " + httppost.getRequestLine());
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity resEntity = response.getEntity();

            System.out.println(response.getStatusLine());
            if (resEntity != null) {
                System.out.println(EntityUtils.toString(resEntity));
            }
            if (resEntity != null) {
                resEntity.consumeContent();
            }

            httpclient.getConnectionManager().shutdown();
        } catch (IOException ex) {
            //Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        new Main().sendLoginRequest();
    }
}

アップロードできるように、ユーザーがログインしているアップロードページを表示する必要があります...

ありがとうございました...

4

0 に答える 0