'Construct the HTTP request to the photo verification service.
Keyword Arguments:
copy_id_photo_from (SoftwareSecurePhotoVerification): If provided, re-send the ID photo
data from this attempt.  This is used for reverification, in which new face photos
are sent with previously-submitted ID photos.
Returns:
tuple of (header, body), where both `header` and `body` are dictionaries.'

def create_request(self, copy_id_photo_from=None):

    access_key = settings.VERIFY_STUDENT['SOFTWARE_SECURE']['API_ACCESS_KEY']
    secret_key = settings.VERIFY_STUDENT['SOFTWARE_SECURE']['API_SECRET_KEY']
    scheme = ('https' if (settings.HTTPS == 'on') else 'http')
    callback_url = '{}://{}{}'.format(scheme, settings.SITE_NAME, reverse('verify_student_results_callback'))
    photo_id_url = (self.image_url('photo_id') if (copy_id_photo_from is None) else self.image_url('photo_id', override_receipt_id=copy_id_photo_from.receipt_id))
    photo_id_key = (self.photo_id_key if (copy_id_photo_from is None) else copy_id_photo_from.photo_id_key)
    body = {'EdX-ID': str(self.receipt_id), 'ExpectedName': self.name, 'PhotoID': photo_id_url, 'PhotoIDKey': photo_id_key, 'SendResponseTo': callback_url, 'UserPhoto': self.image_url('face'), 'UserPhotoKey': self._encrypted_user_photo_key_str()}
    headers = {'Content-Type': 'application/json', 'Date': formatdate(timeval=None, localtime=False, usegmt=True)}
    (_message, _sig, authorization) = generate_signed_message('POST', headers, body, access_key, secret_key)
    headers['Authorization'] = authorization
    return (headers, body)
