Я построил обратный прокси (P) на восходящем сервере (U). Клиентское приложение (C) выдаст запрос P, который, в свою очередь, выдает запрос U, и результат, возвращаемый U, должен быть возвращен клиенту C по доверенности P.Джерси 2 - ответ клиента от метода ресурса
Когда я пишу код в P, как это (я хочу прокси, чтобы быть максимально стандартизован, и поддерживает несколько типов результата):
Client client = // get the client
Invocation.Builder builder = // configure the call to U
return builder.get(InputStream.class);
он работает как JSON и двоичные данные, результат возвращается, но заголовок Content-Type
всегда устанавливается до application/octet-stream
, что неправильно. Я мог проверить результат из U для типа и установить его в ответе от моего прокси-сервера P, но тогда мне пришлось бы возиться с обработкой ошибок и т. Д., Тогда как когда я просто возвращаю InputStream и возникает ошибка, метод builder.get()
выдает исключение, которое затем передается клиенту.
Я бы на самом деле хотел бы просто взять ответ, возвращаемый U и использовать его в качестве возвращаемого значения P, как это:
Client client = // get the client
Invocation.Builder builder = // configure the call to U
return builder.get(); // returns Response
клиента C, в моем случае Python 3 requests
приложение, получить следующее сообщение об ошибке:
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
Я попытался следующий код:
Response upstreamResponse = client./* code code */.get();
upstreamResponse.bufferEntity();
return Response.fromResponse(upstreamResponse);
, но, увы, результат тот же.
Что мне не хватает?
Это точно моя точка зрения - я не хочу этого делать, я просто хотел бы сделать «return updstreamResponse», в котором есть все, о чем вы уже упоминали, и мне не нужно было ничего делать. – wujek
Я не думаю, что вы сможете получить это - прокси-сервер - это немного специализированный прецедент. Но я мог видеть довольно простой метод для копирования, как вы хотите. Вы даже можете сделать так, как и многие прокси, и добавить заголовок, чтобы указать, какой IP, например, запрос был отправлен. Но в целом, я думаю, вам придется сворачивать самостоятельно. – stdunbar
Только одно примечание - я не пишу полноценный прокси-сервер общего назначения; Я пишу небольшую утилиту для моего особо специализированного случая использования. Но я до сих пор не знаю, почему я не могу просто вернуть все, что приходит от восходящего ресурса, должно быть что-то есть, например, заголовок или sth, который разбивает поток. – wujek