Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
#1

Передача HTML как строки из Андроида на сервер - Программирование Android

25.08.2016, 00:27. Просмотров 354. Ответов 14
Метки нет (Все метки)

Приложение андроида принимает html-строку, которую надо передать на сервер для парсинга.
Собственно алгоритм приема html и его передачи на сервер работают. Но только в том случае, когда вместо реального кода страницы подставляется какая-нибудь простая последовательность символов, например 1234567890 или что-то похожее.

Как только подставляется реальный код html, то сервер ничего не получает. Догадываюсь, что причина в тегах кода html. Вопрос, как это можно побороть?

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
                try {
                    URL url = new URL(urlStr);
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("POST");
                    urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    urlConnection.setRequestProperty("Content-Length", "" +
                            Integer.toString(sendPost.getBytes().length));
                    urlConnection.setRequestProperty("Content-Language", "en-US");
                    urlConnection.setUseCaches(false);
                    urlConnection.setDoInput(true);
                    urlConnection.setDoOutput(true);
 
                    DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
                    wr.writeBytes(codeHTML);
                    wr.flush();
                    wr.close();
 
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    String s = "";
                    while ((s = bufferedReader.readLine()) != null) {
                        response += s;
                    }
                    bufferedReader.close();
 
                    urlConnection.disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                }
Вот код, который отвечает за отправку на сервер строки кода html. На данном этапе сервер просто эхом отправляет приложению строку, полученную методом POST.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2016, 00:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача HTML как строки из Андроида на сервер (Программирование Android):

Передача строки с Android на PC сервер - C#
Делаю прогу для отправки ссылок с телефона на комп чере WIFI. Написал сервер на C# и клиент на андроиде. Работа через сокеты ...

Передача текущей строки табличной части из клиента на сервер. - 1С
Необходимо перекинуть текущую строку табличной части из Клиента на Сервер. Подскажите, как это возможно? Если через Временное хранилище, то...

Можно ли в Java передавать данные по сети допустим с андроида в PHP сервер??? - Java
Можно ли в Java передавать данные по сети допустим с андроида в PHP сервер???

Передача запроса при открытии html-файла из командной строки - Web
Суть проблемы такова, надо в Винде из под FAR запустить просмотр C:help.html с передачей запроса типа '?p=string'. При попытке: C:>...

Передача HTML тегов на страницу через бд, как запретить? - C# ASP.NET
Такая бяка. Я Сделал форум, но там можно вводить кусочки кода и как не странно он исполняется. Возможно нужно извлекать из бд каким-то...

Передача файлов от клиента к клиенту, минуя сервер(как в icq). - C++ Builder
Доброго времени суток! Имеется простенький сервер и клиент, основанные на сокетах(TClientSocket и TServerSocket). Сервер...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
25.08.2016, 09:26 #2
Alexvp
Content-Type: application/x-www-form-urlencoded подразумевает что данные пойдут как часть запроса то есть
адрес?имя_1=значение_1&имя_2=значение_2
вы либо вообще не передаете никаких имя_1, имя_2 и т.п и посылаете данные после заголовка (неизвестно как сайт отреагирует на это - все зависит от скрипта обрабатывающего ваш запрос) либо пихаете HTML в значение_1, значение_2 и т.п. что чревато так как там есть ограничения на размер передаваемых данных и допустимые символы.
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
25.08.2016, 16:41  [ТС] #3
Наверное, я немного сумбурно объяснил свою проблему.
Алгоритм следующий:
1. Приложение посылает стандартный запрос url на нужную страницу нужного сайта, например yandex.ru
2. В ответ на запрос сайт отправляет стандартную html-строку, аналогично ответу на запрос из любого браузера.
3. Приложение получает эту строку, сохраняет как строку и должно ее отправить на свой сервер для парсинга.
4. В ответ приложение получает результат парсинга, который выводится пользователю на экран.

Может возникнуть вопрос, зачем такие ухищрения? Согласен, можно парсить в самом приложении с помощью библиотеки jsoup. Но в любой момент на сайте может измениться структура и парсинг перестанет работать. Придется обновлять само приложение, что негативно. А так я всегда смогу оперативно изменить правила парсинга на сервере и пользователи ничего не почувствуют.

с п1 по п.3 все работает отлично, но почему-то появились проблемы с передачей страницы html в виде строки на свой сервер.

К сожалению, пока не смог разобраться из-за побочных дел, отвлекающий от главного

Последнее, что пробовал был метод Html.fromHtml, но результат негативный. Хотя еще позже снова попробую кое-какие идеи.
0
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
25.08.2016, 17:04 #4
Alexvp как скрипт достает эту самую HTML-строку из вашего запроса?
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
25.08.2016, 20:31  [ТС] #5
Скрипт на моем сервере? Приложение передает ему эту строку методом POST. Это происходит в коде, который я привел в стартовом посту.
0
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
25.08.2016, 21:03 #6
Alexvp, вы не можете показать как он вычитывает строку? Тогда идей нет. Порча наверное вот и не работает
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
25.08.2016, 21:26  [ТС] #7
Секрета нет
Скрипт на php
PHP
1
2
//$html = trim($_POST['html']);
$html = mysql_real_escape_string($html, $conn);
Для тестирования я вообще убрал любую обработку строки и эхом строку отправляю назад в приложение
PHP
1
echo $_POST['html'];
Обычные строки обрабатываются отлично, а вот строка, содержащая html не проходит
0
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
26.08.2016, 09:21 #8
Alexvp, а теперь покажите где же в вашем клиентском коде идет отправка переменной html
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
27.08.2016, 06:11  [ТС] #9
Цитата Сообщение от vxg Посмотреть сообщение
покажите где же в вашем клиентском коде идет отправка переменной html
Вот мой код, комменты внутри
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
    String html; // переменная активити для строки с кодом html страницы для парсинга
    
    
    ServerTaskWeb taskRequest = new ServerTaskWeb();
    taskRequest.execute(new String[]{webUrl}); // webUrl - адрес страницы сайта для парсинга
 
    private class ServerTaskWeb extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {
            android.os.Debug.waitForDebugger();
            String response = "";
 
            for (String urlStr : urls) {
                //use URLConnection
                try {
                    URL url = new URL(urlStr);
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setUseCaches(false);
                    urlConnection.setDoInput(true);
                    urlConnection.setDoOutput(true);
 
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    String s = "";
                    while ((s = bufferedReader.readLine()) != null) {
                        response += s;
                    }
                    bufferedReader.close();
 
                    urlConnection.disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return response;
        }
 
        @Override
        protected void onPostExecute(String result) {
            html = result; // строка html страниц сайта для парсинга
            TextView note = (TextView)findViewById(R.id.scanNoteReq);
            note.setText(html); // вывод на экран приложения полученной строки. Все выводится в текстовом виде правильно
            // передаем строку для парсинга на сервер и ждем ответа
            ServerTaskMyServer taskSendServer = new ServerTaskMyServer();
            taskSendServer.execute(new String[]{"веб адрес скрипта на моем сервере"});
        }
    }
 
    private class ServerTaskMyServer extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {
            String response = "";
            sendPost = "h=" + html; // строка с кодом html страницы для передачи методом POST
            for (String urlStr : urls) {
                //use URLConnection
                try {
                    URL url = new URL(urlStr);
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("POST");
                    urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    urlConnection.setRequestProperty("Content-Length", "" +
                            Integer.toString(sendPost.getBytes().length));
                    urlConnection.setRequestProperty("Content-Language", "en-US");
                    urlConnection.setUseCaches(false);
                    urlConnection.setDoInput(true);
                    urlConnection.setDoOutput(true);
 
                    DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
                    wr.writeBytes(sendPost);
                    wr.flush();
                    wr.close();
 
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    String s = "";
                    while ((s = bufferedReader.readLine()) != null) {
                        response += s;
                    }
                    bufferedReader.close();
 
                    urlConnection.disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
 
 
            return response;
        }
 
        @Override
        protected void onPostExecute(String result) {
            TextView note = (TextView)findViewById(R.id.scanNoteReq);
            note.setText(result); // вывод на экран приложения ответа от сервера
        }
    }
Если я принудительно задаю значение переменной html, например, Hello, world!, то все отрабатывает отлично. А вот при html-коде на сервер ничего не передается.

Добавлено через 18 минут
Еще обнаружил, что при отправке методом POST строки с кириллицей, например банальной "Привет, мир!" происходит тоже самое - строка не передается на сервер.

Добавлено через 6 часов 27 минут
Причину проблемы нашел, осталось найти решение

Приложение не могло отправить код html в виде POST по причине кодировки. Дело в том, что в андроиде используется однобайтная кодировка, поэтому английские фразы проходили отлично. А кириллица и ряд других символов используют двухбайтную кодировку utf. Когда я убрал строчку
Java
1
2
urlConnection.setRequestProperty("Content-Length", "" +
                            Integer.toString(sendPost.getBytes().length));
то запросы стали уходить, но проблема с кириллицей осталась.

Да, для отправки кода html в виде строки POST пришлось предварительно очищать от тегов с помощью
Java
1
html = Html.fromHtml(result).toString();
У кого-нибудь есть мысли насчет того, как корректно передать кириллицу? Сейчас из-за однобайтного года получаю неверный результат. Сообразить не могу, так как на моих часах 4.43 утра

Добавлено через 1 час 24 минуты
остался последний шаг

Дошло, что надо использовать URLEncoder.encode, но тут вылезла еще одна проблемка.
Когда использую так
Java
1
URLEncoder.encode("Вася Пупкин");
то все работает великолепно. Однако в таком виде это deprecated, рекомендуется такая конструкция
Java
1
2
3
4
5
6
7
           try {
                phrase = URLEncoder.encode(("Вася Пупкин"), "utf-8");
 
                return phrase;
            } catch (UnsupportedEncodingException e) {
 
            }
Логично, но тут подвох. Вместо "Васи Пупкина" я получаю набор в виде %D0%92...
Пишу в студии, кодировка стоит utf-8

Добавлено через 3 минуты
На всякий случай полный скрипт на моем сервере
PHP
1
2
3
4
5
6
7
<?php
header('Content-type: text/html; charset=utf-8');
 
echo $_POST['h'];
 
exit;
?>
0
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
27.08.2016, 18:46 #10
Alexvp, лично я делаю так (может что то вам пригодится) - правда тут чистые сокеты + сервер обязан отдавать заголовок Content-Length
код для POST-запроса
Кликните здесь для просмотра всего текста
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
    public static boolean equals(byte[] a, String bStr) {
        try {
            byte[] b = bStr.getBytes("UTF-8");
            if (a.length < b.length) return false;
            for (int i = 0; i < b.length; i++) {
                if (a[i] != b[i]) {
                    return false;
                }
            }
            return true;
        } catch (UnsupportedEncodingException e) {
        }
        return false;
    }
 
    public static int indexOf(byte[] a, String bStr, int off) {
        try {
            byte[] b = bStr.getBytes("UTF-8");
            if (a.length - off < b.length) return -1;
            int posMax = a.length - b.length;
            for (int pos = off; pos <= posMax; pos++) {
                boolean found = true;
                for (int i = 0; i < b.length; i++) {
                    if (a[pos + i] != b[i]) {
                        found = false;
                        break;
                    }
                }
                if (found) return pos;
            }
            return -1;
        } catch (UnsupportedEncodingException e) {
        }
        return -1;
    }
    
    public static byte[] getBoundary(byte[] boundary, byte[] data) {
        try {
            ByteArrayOutputStream bs = new ByteArrayOutputStream();
            bs.write(boundary);
            byte[] res = bs.toByteArray();
            if (data.length == 0) {
                if (bs.size() == 0) {
                    bs.write('A');
                    res = bs.toByteArray();
                }
            } else {
                if (bs.size() == 0) {
                    byte c = data[0];
                    c++;
                    if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9')) {
                        bs.write(c);
                    } else {
                        bs.write('A');
                    }
                    res = bs.toByteArray();
                }
                
                for (int i = 0; i < data.length; i++) {
                    if (bs.size() > data.length - i) break;
    
                    boolean good = false;
                    for (int j = 0; j < bs.size(); j++) {
                        if (res[j] != data[i + j]) {
                            good = true;
                            break;
                        }
                    }
                    if (!good) {
                        if (bs.size() == data.length - i) {
                            bs.write('A');
                        } else {
                            byte c = data[i + bs.size()];
                            c++;
                            if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9')) {
                                bs.write(c);
                            } else {
                                bs.write('A');
                            }
                        }
                        res = bs.toByteArray();
                    }
                }
            }
            return res;
        } catch (IOException e) {
        }
        return null;
    }
    
    public static byte[] part(byte[] a, int beg, int end) {
        int n = end - beg + 1;
        byte[] res = new byte[n];
        for (int i = 0; i < n; i++){
            res[i] = a[i + beg];
        }
        return res;
    }
    
    public static byte[] post(String doc, byte[] data, String boundaryStr, String localCopy) {
        byte[] res = null;
        
        if (socket == null) {
            App.log("CREATE NEW SOCKET");
            
            SocketAddress addr = new InetSocketAddress(host, hostPort);
            socket = new Socket();
            
            try {
                socket.connect(addr, 0);
                if (!socket.isConnected()) {
                    socket = null;
                    return res;
                }
            } catch (IOException e) {
                socket = null;
                return res;
            }
 
            App.log("CONNECTED");
        }
        
        OutputStream os = null;
        InputStream is = null;
        try {
            os = socket.getOutputStream();
            is = socket.getInputStream();
        } catch (IOException e) {
            abort();
            return res;
        }
        
        try {
            os.write(new String(
                "POST http://" + host + ":" + hostPort + doc + " HTTP/1.0\r\n" +
                "Host: " + host + ":" + hostPort + "\r\n" +
                "Content-Type: multipart/form-data; boundary=" + boundaryStr + "\r\n" +
                "Content-Length: " + data.length + "\r\n" +
                "Connection: Keep-alive\r\n" +
                "\r\n").getBytes("UTF-8")
            );
            os.write(data);
            os.flush();
        } catch (UnsupportedEncodingException e) {
            abort();
            return res;
        } catch (IOException e) {
            abort();
            return res;
        }
        
        System.gc();
        byte[] buffer = new byte[0xF000];
        FileOutputStream fs = null;
        if (localCopy != null) {
            try {
                fs = new FileOutputStream(new File(localCopy));
            } catch (FileNotFoundException e) {
                abort();
                return res;
            }
        }
        ByteArrayOutputStream cs = new ByteArrayOutputStream();
        String tag = "HTTP/1.1 200 OK";
        int contentLength = -1;
        int headerLength = -1;
        int size = 0;
        while (!Thread.currentThread().isInterrupted()) {
            try {
                int length = is.read(buffer);
                if (length != -1) {
                    if (contentLength < 0 || fs == null) {
                        cs.write(buffer, 0, length);
                    } else {
                        fs.write(buffer, 0, length);
                    }
                    size += length;
                }
            } catch (IOException e) {
                abort();
                return res;
            }
            if (contentLength < 0) {
                if (cs.size() >= tag.length()) {
                    byte[] content = cs.toByteArray();
                    if (!equals(content, tag)) {
                        break;
                    }
                    int contentBeg = indexOf(content, "\r\n\r\n", 0);
                    if (contentBeg > 0) {
                        headerLength = contentBeg + 4;
                        int contentLengthBeg = indexOf(content, "Content-Length:", 0);
                        if (contentLengthBeg < 0) {
                            break;
                        }
                        int contentLengthEnd = indexOf(content, "\r\n", contentLengthBeg);
                        if (contentLengthEnd < 0) {
                            break;
                        }
                        try {
                            contentLength = Integer.parseInt(new String(part(content, contentLengthBeg + 15, contentLengthEnd - 1), "UTF-8").trim());
                            if (fs != null) {
                                try {
                                    fs.write(part(cs.toByteArray(), headerLength, cs.size() - 1));
                                } catch (IOException e) {
                                    abort();
                                    return res;
                                }
                            }
                        } catch (UnsupportedEncodingException e) {
                            break;
                        } catch (NumberFormatException e) {
                            break;
                        }
                    }
                }
            }
            if (contentLength != -1 && headerLength + contentLength == size) {
                if (fs == null) {
                    res = part(cs.toByteArray(), headerLength, cs.size() - 1);
                } else {
                    try {
                        fs.flush();
                        fs.close();
                    } catch (IOException e) {
                        abort();
                        return res;
                    }
                    res = new byte[0];
                }
                break;
            }
        }
                
        return res;
    }
    
    public static String getBoundaryStr(ArrayList<byte[]> args) {
        byte[] boundary = new byte[0];
        
        for (int i = 0; i < args.size(); i++) {
            boundary = getBoundary(boundary, args.get(i));
        }
 
        try {
            return new String(boundary, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            return null;
        }
    }
    
    public static byte[] getData(ArrayList<byte[]> args, String boundaryStr) {
        byte[] separator = null;
        byte[] endl = null;
        byte[] terminator = null;
        try {
            separator = ("--" + boundaryStr + "\r\n").getBytes("UTF-8");
            endl = ("\r\n").getBytes("UTF-8");
            terminator = ("--" + boundaryStr + "--\r\n").getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            return null;
        }
        
        ByteArrayOutputStream cs = new ByteArrayOutputStream();
        try {
            for (int i = 0; i < args.size(); i++) {
                cs.write(separator);
                cs.write(args.get(i));
                cs.write(endl);
            }
            cs.write(terminator);
        } catch (IOException e) {
            return null;
        }
        return cs.toByteArray();
    }

пример использования
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
        ArrayList<byte[]> args = new ArrayList<byte[]>();
 
        try {
            args.add((
            "Content-Disposition: form-data; name=тут_бэк_слеш"arg1тут_бэк_слеш"\r\n" + 
            "\r\n" + 
            arg1
            ).getBytes("UTF-8"));
 
            args.add((
            "Content-Disposition: form-data; name=тут_бэк_слеш"arg2тут_бэк_слеш"\r\n" + 
            "\r\n" + 
            arg2
            ).getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            return;
        }
            
        String boundaryStr = getBoundaryStr(args);
        if (boundaryStr == null) {
            return;
        }
        
        byte[] data = getData(args, boundaryStr);
        if (data == null) {
            return;
        }
        
        byte[] res = post("/test.php", data, boundaryStr, null);
1
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
27.08.2016, 20:50  [ТС] #11
Спасибо, но как-то к сокетам не предрасположен

Задачу решил, просто под утро зачем-то указал возврат внешней переменной из конструкции try для URLEncoder.encode. Теперь "Вася Пупкин" передается без проблем.
0
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
27.08.2016, 21:25 #12
Alexvp, сокеты если у вас на них аллергия можете не применять просто посмотрите на подход при котором данные идут в multipart/form-data и нет проблем ни с кодировками ни с недопустимыми символами
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
27.08.2016, 22:55  [ТС] #13
Спасибо, попробую проверить завтра.
0
Pablito
2489 / 1934 / 604
Регистрация: 12.05.2014
Сообщений: 6,793
Завершенные тесты: 1
28.08.2016, 10:22 #14
почему бы просто не дергать какой-то метод на сервере и пусть сервер сам читает данные, парсит, а потом отдает уже пережеванное и переваренное клиенту?
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
28.08.2016, 18:39  [ТС] #15
Это был первый вариант алгоритма, но решил от него отказаться. В данном парсинге нет ничего криминального, более того, пользователь знает откуда берется информация. И более того, сайт-донор специально создан для предоставления этой информации пользователям.
Но. Всякое может быть, если слать запросы пользователей через свой единый сервер, то будут запросы идти с одного IP-адреса и хрен его знает, что в голову взбредет админу сервера. Посчитает какой-нибудь дидос-атакой и забанит.
В реализуемом алгоритме запросы идут с разных IP-адресов, полностью соответствуя обычной схеме работы с этим ресурсом.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2016, 18:39
Привет! Вот еще темы с ответами:

Передача строки в функцию и возврат строки как результата - C (СИ)
Короче товарищи замучился я со строками в си, поскольку перешел из delphi там с этим проблем нет. И меня собственно интересует такая штука...

Передача данных между страницами html (запрос к базе)-> php (обработка) -> html (вывод результата обработки) - PHP
Есть два файла: 1) index.php HTML c кнопкой, которая запускает PHP обработчик запроса к базе данных 2) do.php PHP обработчик,...

Как востановить файлы с андроида ? - Смартфоны
день добрый , смарт кенекси , не знаю графического ключа но на заводские сбросить не хочу нужно сохранить фотографии , как можно это...

Как написать приложение для андроида? - Программирование Android
такой вопрос. сделал сайт с фильмами онлайн, теперь хачу сделать приложения для андроида, чтоб люди могли заходить и смотреть фильмы со...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.08.2016, 18:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru