আপনার খারাপ পরিস্থিতিটি আপনি যা ভাবেন তেমন খারাপ নয়।
আপনি ইতিমধ্যে আরএসএস ফিডটি পার্স করছেন, সুতরাং আপনার ইতিমধ্যে ইমেজ ইউআরএল রয়েছে। বলুন আপনার মত একটি চিত্র URL আছে http://otherdomain.com/someimage.jpg
। আপনি এই ইউআরএল হিসাবে নতুন করে লিখুন https://mydomain.com/imageserver?url=http://otherdomain.com/someimage.jpg&hash=abcdeafad
। এইভাবে, ব্রাউজারটি সর্বদা https- র মাধ্যমে অনুরোধ করে, যাতে আপনি সমস্যা থেকে মুক্তি পান।
পরবর্তী অংশ - একটি প্রক্সি পৃষ্ঠা বা সার্লেট তৈরি করুন যা নিম্নলিখিতগুলি করে -
- কোয়েরি স্ট্রিং থেকে url প্যারামিটারটি পড়ুন এবং হ্যাশটি যাচাই করুন
- সার্ভার থেকে চিত্রটি ডাউনলোড করুন এবং এটি ব্রাউজারে ফিরে যান
- Allyচ্ছিকভাবে, ডিস্কে চিত্রটি ক্যাশে করুন
এই সমাধানের কিছু সুবিধা রয়েছে। এইচটিএমএল তৈরি করার সময় আপনাকে চিত্রটি ডাউনলোড করতে হবে না। আপনার স্থানীয়ভাবে ছবিগুলি সংরক্ষণ করতে হবে না। এছাড়াও, আপনি রাষ্ট্রহীন; ইউআরএলে চিত্রটি পরিবেশন করার জন্য প্রয়োজনীয় সমস্ত তথ্য রয়েছে।
অবশেষে, হ্যাশ প্যারামিটারটি সুরক্ষার জন্য; আপনি কেবল চান যে আপনার সার্লেটটি আপনার নির্মিত url গুলির জন্য চিত্র সরবরাহ করতে পারে। সুতরাং, আপনি যখন ইউআরএল তৈরি করবেন তখন md5(image_url + secret_key)
তা হ্যাশ প্যারামিটার হিসাবে গণনা করুন এবং যুক্ত করুন। আপনি অনুরোধটি পরিবেশন করার আগে, হ্যাশটি পুনরায় সংশোধন করুন এবং আপনার কাছে যা যা গেছে তার সাথে এটি তুলনা করুন। যেহেতু গোপন_কি আপনার কাছেই পরিচিত, অন্য কেউ বৈধ url তৈরি করতে পারবেন না।
আপনি যদি জাভাতে বিকাশ করছেন, সার্ভলেটটি কোডের কয়েকটি লাইন। আপনার নীচের কোডটি অন্য কোনও ব্যাক-এন্ড প্রযুক্তিতে পোর্ট করতে সক্ষম হওয়া উচিত।
/*
targetURL is the url you get from RSS feeds
request and response are wrt to the browser
Assumes you have commons-io in your classpath
*/
protected void proxyResponse (String targetURL, HttpServletRequest request,
HttpServletResponse response) throws IOException {
GetMethod get = new GetMethod(targetURL);
get.setFollowRedirects(true);
/*
* Proxy the request headers from the browser to the target server
*/
Enumeration headers = request.getHeaderNames();
while(headers!=null && headers.hasMoreElements())
{
String headerName = (String)headers.nextElement();
String headerValue = request.getHeader(headerName);
if(headerValue != null)
{
get.addRequestHeader(headerName, headerValue);
}
}
/*Make a request to the target server*/
m_httpClient.executeMethod(get);
/*
* Set the status code
*/
response.setStatus(get.getStatusCode());
/*
* proxy the response headers to the browser
*/
Header responseHeaders[] = get.getResponseHeaders();
for(int i=0; i<responseHeaders.length; i++)
{
String headerName = responseHeaders[i].getName();
String headerValue = responseHeaders[i].getValue();
if(headerValue != null)
{
response.addHeader(headerName, headerValue);
}
}
/*
* Proxy the response body to the browser
*/
InputStream in = get.getResponseBodyAsStream();
OutputStream out = response.getOutputStream();
/*
* If the server sends a 204 not-modified response, the InputStream will be null.
*/
if (in !=null) {
IOUtils.copy(in, out);
}
}