Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 11

400 bad request

03.02.2016, 18:00. Показов 1647. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем при вызове sendImage должен происходить пост изображения в instagram, логинится нормально, но при попытке загрузить изображение возникает ошибка 400, мб кому-нибудь будет интересно разобраться в чем проблема?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import org.json.simple.parser.ParseException;
 
import java.io.File;
import java.io.UnsupportedEncodingException;
 
public class InstPost {
    public static void main(String args[]){
        InstagramPostHelper post = new InstagramPostHelper();
        File img = new File("C:\\Users\\don\\Desktop\\img1.jpg");
        try {
            post.SendImage("kek", img);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpCookie;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
import java.util.Map;
 
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.net.ssl.HttpsURLConnection;
 
import org.apache.commons.codec.binary.Hex;
import org.apache.http.HttpEntity;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
 
public class InstagramPostHelper {
 
    private static InstagramPostHelper instance = null;
 
    protected InstagramPostHelper() {}
 
    public static InstagramPostHelper getInstance() {
        if (instance == null) {
            instance = new InstagramPostHelper();
        }
        return instance;
    }
 
    private String generateSignature(String value, String key) {
        String result = null;
        try {
            byte[] keyBytes = key.getBytes();
            SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA256");
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(signingKey);
            byte[] rawHmac = mac.doFinal(value.getBytes());
            byte[] hexBytes = new Hex().encode(rawHmac);
            result = new String(hexBytes, "UTF-8");
        } catch (Exception e) {
 
        }
        return result;
 
    }
 
    private static final String COOKIES_HEADER = "Set-Cookie";
    public static java.net.CookieManager msCookieManager = new java.net.CookieManager();
    private HttpsURLConnection conn;
 
    private static String textUtilsJoin(CharSequence delimiter, List < HttpCookie > list) {
        StringBuilder sb = new StringBuilder();
        boolean firstTime = true;
        for (Object token: list) {
 
            if (token.toString().trim().length() < 1) continue;
            if (firstTime) {
                firstTime = false;
            } else {
                sb.append(delimiter + " ");
            }
 
            sb.append(token);
 
        }
        return sb.toString();
    }
 
    private String getJSONStringAndPostData(String jsonaddress, String postdata, String agent) {
        String sonuc = "";
        try {
 
            byte[] postDataBytes = postdata.toString().getBytes("UTF-8");
 
 
            URL url = new URL(jsonaddress);
 
 
            conn = (HttpsURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
            conn.setRequestProperty("User-Agent", agent);
 
            //Set Cookies
            if (msCookieManager.getCookieStore().getCookies().size() > 0) {
                conn.setRequestProperty("Cookie", textUtilsJoin(";", msCookieManager.getCookieStore().getCookies()));
            }
 
            conn.setDoOutput(true);
            conn.getOutputStream().write(postDataBytes);
 
            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
            }
 
            //Get Cookies
            Map < String, List < String >> headerFields = conn.getHeaderFields();
            List < String > cookiesHeader = headerFields.get(COOKIES_HEADER);
            if (cookiesHeader != null) {
                for (String cookie: cookiesHeader) {
                    msCookieManager.getCookieStore().add(null, HttpCookie.parse(cookie).get(0));
                }
            }
 
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    (conn.getInputStream())));
            String output;
            while ((output = br.readLine()) != null) {
                sonuc += output;
            }
            conn.disconnect();
        } catch (MalformedURLException e) {
            return "";
        } catch (IOException e) {
            return "";
        }
        return sonuc;
    }
 
    public void SendImage(String caption, File uploadFile) throws UnsupportedEncodingException, ParseException {
        String agent = "Instagram 6.21.2 Android (19/4.4.2; 480dpi; 1152x1920; Meizu; MX4; mx4; mt6595; en_US)";
        String guid = java.util.UUID.randomUUID().toString();
        String deviceId = "android-" + guid;
        String data = "{"device_id":"" + deviceId + "","guid":"" + guid + "","username":"philippovalex","password":"555789qq","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}";
        String sig = generateSignature(data, "25eace5393646842f0d0c3fb2ac7d3cfa15c052436ee86b5406a8433f54d24a5");
        data = "signed_body=" + sig + "." + URLEncoder.encode(data, "UTF-8") + "&ig_sig_key_version=4";
 
        if (msCookieManager.getCookieStore() != null) {
            msCookieManager.getCookieStore().removeAll();
        }
        //Login Request
        String login = getJSONStringAndPostData("https://i.instagram.com/api/v1/accounts/login/", data, agent);
 
        JSONParser parser = new JSONParser();
        Object obj = parser.parse(login);
        JSONObject jsonObject = (JSONObject) obj;
        if (((String) jsonObject.get("status")).equals("ok")) //Login SuccessFul
        {
            //Login Successful
            System.out.println("Login Successful !");
 
            //Post Image
            String upload = "";
 
 
            try {
                final HttpMultipartHelper http = new HttpMultipartHelper("https://i.instagram.com/api/v1/media/upload/", "UTF-8");
                http.addFormField("device_timestamp", Long.toString((new Date()).getTime()));
                http.addFilePart("photo", uploadFile);
                upload = http.finish().toString();
            } catch (IOException e) {
                e.printStackTrace();
            }
 
 
            System.out.println(upload);
            obj = parser.parse(upload);
            jsonObject = (JSONObject) obj;
            if (((String) jsonObject.get("status")).equals("ok")) //Login SuccessFul
            {
                String mediaID = (String) jsonObject.get("media_id");
 
                data = "{"device_id":"" + deviceId + "","guid":"" + guid + "","media_id":"" + mediaID + "","caption":"" + caption + "","device_timestamp":"" + Long.toString((new Date()).getTime()).substring(0, 10) + "","source_type":"5","filter_type":"0","extra":"{}","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}";
                sig = generateSignature(data, "25eace5393646842f0d0c3fb2ac7d3cfa15c052436ee86b5406a8433f54d24a5");
 
                data = "signed_body=" + sig + "." + URLEncoder.encode(data, "UTF-8").replace("+", "%20") + "&ig_sig_key_version=6";
 
                //Login Request
                System.out.println(data);
                String result = getJSONStringAndPostData("https://instagram.com/api/v1/media/configure/", data, agent);
 
                System.out.println(result);
            }
 
 
        } else //Login UnsuccessFul
        {
            System.out.println("Login Unsuccessful !" + login);
        }
 
 
    }
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import java.io.BufferedReader;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
 
/**
 * This utility class provides an abstraction layer for sending multipart HTTP
 * POST requests to a web server.
 * @author [url]www.codejava.net[/url]
 *
 */
public class HttpMultipartHelper {
    private final String boundary;
    private static final String LINE_FEED = "\r\n";
    private HttpURLConnection httpConn;
    private String charset;
    private OutputStream outputStream;
    private PrintWriter writer;
 
    /**
     * This constructor initializes a new HTTP POST request with content type
     * is set to multipart/form-data
     * @param requestURL
     * @param charset
     * @throws IOException
     */
    public HttpMultipartHelper(String requestURL, String charset)
            throws IOException {
        this.charset = charset;
 
        // creates a unique boundary based on time stamp
        boundary = "===" + System.currentTimeMillis() + "===";
 
        URL url = new URL(requestURL);
        httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setUseCaches(false);
        httpConn.setDoOutput(true); // indicates POST method
        httpConn.setDoInput(true);
        httpConn.setRequestProperty("Content-Type",
                "multipart/form-data; boundary=" + boundary);
        httpConn.setRequestProperty("User-Agent", "CodeJava Agent");
        httpConn.setRequestProperty("Test", "Bonjour");
        outputStream = httpConn.getOutputStream();
        writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
                true);
    }
 
    /**
     * Adds a form field to the request
     * @param name field name
     * @param value field value
     */
    public void addFormField(String name, String value) {
        writer.append("--" + boundary).append(LINE_FEED);
        writer.append("Content-Disposition: form-data; name="" + name + """)
                .append(LINE_FEED);
        writer.append("Content-Type: text/plain; charset=" + charset).append(
                LINE_FEED);
        writer.append(LINE_FEED);
        writer.append(value).append(LINE_FEED);
        writer.flush();
    }
 
    /**
     * Adds a upload file section to the request
     * @param fieldName name attribute in <input type="file" name="..." />
     * @param uploadFile a File to be uploaded
     * @throws IOException
     */
    public void addFilePart(String fieldName, File uploadFile)
            throws IOException {
        String fileName = uploadFile.getName();
        writer.append("--" + boundary).append(LINE_FEED);
        writer.append(
                "Content-Disposition: form-data; name="" + fieldName
                        + ""; filename="" + fileName + """)
                .append(LINE_FEED);
        writer.append(
                "Content-Type: "
                        + URLConnection.guessContentTypeFromName(fileName))
                .append(LINE_FEED);
        writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
        writer.append(LINE_FEED);
        writer.flush();
 
        FileInputStream inputStream = new FileInputStream(uploadFile);
        byte[] buffer = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        outputStream.flush();
        inputStream.close();
 
        writer.append(LINE_FEED);
        writer.flush();
    }
 
    /**
     * Adds a header field to the request.
     * @param name - name of the header field
     * @param value - value of the header field
     */
    public void addHeaderField(String name, String value) {
        writer.append(name + ": " + value).append(LINE_FEED);
        writer.flush();
    }
 
    /**
     * Completes the request and receives response from the server.
     * @return a list of Strings as response in case the server returned
     * status OK, otherwise an exception is thrown.
     * @throws IOException
     */
    public List<String> finish() throws IOException {
        List<String> response = new ArrayList<String>();
 
        writer.append(LINE_FEED).flush();
        writer.append("--" + boundary + "--").append(LINE_FEED);
        writer.close();
 
        // checks server's status code first
        int status = httpConn.getResponseCode();
        if (status == HttpURLConnection.HTTP_OK) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    httpConn.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null) {
                response.add(line);
            }
            reader.close();
            httpConn.disconnect();
        } else {
            throw new IOException("Server returned non-OK status: " + status);
        }
 
        return response;
    }
}
[JAVA]Login Successful !
java.io.IOException: Server returned non-OK status: 400
at pack.HttpMultipartHelper.finish(HttpMult ipartHelper.java:146)
at pack.InstagramPostHelper.SendImage(Insta gramPostHelper.java:159)
at pack.InstPost.main(InstPost.java:19)
Unexpected token END OF FILE at position 0.
at org.json.simple.parser.JSONParser.parse( JSONParser.java:257)
at org.json.simple.parser.JSONParser.parse( JSONParser.java:81)
at org.json.simple.parser.JSONParser.parse( JSONParser.java:75)
at pack.InstagramPostHelper.SendImage(Insta gramPostHelper.java:166)
at pack.InstPost.main(InstPost.java:19)[JAVA]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2016, 18:00
Ответы с готовыми решениями:

NanoHttpd и ajax BAD REQUEST
Привет. Не могу второй день победить. Если JS передаёт какие нибудь параметры в POST запросе, то каждый второй запрос = BAD REQUEST,...

Request.Response ошибка 400 bad request
Добрый день! Прошу помочь с обработкой запросов в Python 2.7.11 Принимать реквест и сохранить на сервере файл из него уже...

400 Bad Request
Использую socket подключаюсь к php серверу. Выдаёт 400 Bad Request. import socket class _database(): def...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2016, 18:00
Помогаю со студенческими работами здесь

400 Bad Request
Ребят, помогите советом, пожалуйста. я уже устала... Проблема: При попытке воспользоваться Yandex-поиском вылезает: Bad Request ...

400 Bad request
Когда пытаюсь получить инфу с сайта, получаю 400 Bad Request, что делать?? Срочно, прошу!! #pragma optimize(&quot;t&quot;,on) ...

Ошибки Synapse (HTTP/1.1 400 Bad Request / HTTP/1.1 413 Request Entity Too Large)
Добрый день. При работе с Synapse начали возникать вот такие вот две ошибки (HTTP/1.1 400 Bad Request / HTTP/1.1 413 Request Entity Too...

SSL 400 Bad Request
Помогите разобраться с проблемой выше. Сделал все по статье &quot;Авторизация клиентов в nginx посредством SSL сертификатов&quot;, вроде уже...

Ошибка 400 Bad Request
Формирую вот такой запрос POST: POST index.php HTTP/1.1 Host: risris.cwahi.net Referer: http://risris.cwahi.net/index.php ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru