Skip to content

Commit 47525bd

Browse files
Add JSON response validation to prevent decode errors
Co-authored-by: marc-hanheide <1153084+marc-hanheide@users.noreply.github.com>
1 parent 68ee174 commit 47525bd

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

figshare.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,14 @@ def shorten(self, doi):
5353
quoted_doi = urllib.request.quote(doi)
5454
url = 'http://shortdoi.org/{}?format=json'.format(quoted_doi)
5555
try:
56-
response = requests.get(url).json()
57-
short_doi = response['ShortDOI']
56+
response = requests.get(url)
57+
# Check if response is valid JSON
58+
if response.headers.get('Content-Type', '').startswith('application/json') and response.text.strip():
59+
result = response.json()
60+
short_doi = result['ShortDOI']
61+
else:
62+
self.logger.warning(f"Received empty or invalid JSON response for {doi} from {url}")
63+
return None
5864
except Exception as e:
5965
self.logger.warning(f"failed to get short doi for {doi}: {e}")
6066
return None
@@ -150,21 +156,33 @@ def __get(self, url, params=None, use_cache=True):
150156
return self.__cache[hash_key]
151157
else:
152158
headers = { "Authorization": "token " + self.token } if self.token else {}
153-
result = get(self.base_url + url, headers=headers, params=params).json()
154-
self.__cache[hash_key] = result
155-
self.save_cache()
156-
return result
159+
response = get(self.base_url + url, headers=headers, params=params)
160+
# Check if response is valid JSON
161+
if response.headers.get('Content-Type', '').startswith('application/json') and response.text.strip():
162+
result = response.json()
163+
self.__cache[hash_key] = result
164+
self.save_cache()
165+
return result
166+
else:
167+
self.logger.warning(f"Received empty or invalid JSON response for GET {self.base_url + url}")
168+
return {}
157169

158170
def __post(self, url, params=None, use_cache=True):
159171
hash_key = f"POST{url}?{params}"
160172
if hash_key in self.__cache and use_cache:
161173
return self.__cache[hash_key]
162174
else:
163175
headers = { "Authorization": "token " + self.token } if self.token else {}
164-
result = post(self.base_url + url, headers=headers, json=params).json()
165-
self.__cache[hash_key] = result
166-
self.save_cache()
167-
return result
176+
response = post(self.base_url + url, headers=headers, json=params)
177+
# Check if response is valid JSON
178+
if response.headers.get('Content-Type', '').startswith('application/json') and response.text.strip():
179+
result = response.json()
180+
self.__cache[hash_key] = result
181+
self.save_cache()
182+
return result
183+
else:
184+
self.logger.warning(f"Received empty or invalid JSON response for POST {self.base_url + url}")
185+
return []
168186

169187

170188
def articles_by_user_name(self, user_name, use_cache=True):

0 commit comments

Comments
 (0)